Max_Leb

Untitled

Mar 30th, 2023
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.63 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from math import *
  4. import pandas as pd
  5. import titleprint as pt
  6. from sympy import *
  7.  
  8. def xi(i):
  9. return a + i * h
  10.  
  11.  
  12. def func_value(x):
  13. return x**3 - sin(x)
  14.  
  15.  
  16. def print_value_table():
  17. values = []
  18. for i in range(0, 11):
  19. x = xi(i)
  20. y = round(func_value(x), 2)
  21. values.append({'x' : x, 'y' : y})
  22. print(pd.DataFrame(values))
  23.  
  24.  
  25. def L1(i):
  26. return func_value(xi(i)) * (inter_point - xi(i + 1)) \
  27. / (xi(i) - xi(i + 1)) + func_value(xi(i + 1)) \
  28. * (inter_point - xi(i)) / (xi(i + 1) - xi(i))
  29.  
  30.  
  31. def find_der2_val(i):
  32. val = xi(i)
  33. return expr_der2.subs(x, val)
  34.  
  35.  
  36. def R1(w2, i):
  37. return abs(find_der2_val(i) * w2 / 2)
  38.  
  39.  
  40. def W2(i):
  41. return round((inter_point - xi(i)) * (inter_point - xi(i + 1)), 4)
  42.  
  43.  
  44. def check(min_value, max_value, true_value):
  45. if true_value >= max_value or true_value <= min_value:
  46. return false
  47. return true
  48.  
  49.  
  50. def L2(i):
  51. return func_value(xi(i - 1)) * ((inter_point - xi(i)) * (inter_point - xi(i + 1))) / ((xi(i - 1) - xi(i)) * (xi(i - 1) - xi(i + 1))) \
  52. + func_value(xi(i)) * ((inter_point - xi(i - 1)) * (inter_point - xi(i + 1))) / ((xi(i) - xi(i - 1)) * (xi(i) - xi(i + 1))) \
  53. + func_value(xi(i + 1)) * ((inter_point - xi(i - 1)) * (inter_point - xi(i))) / ((xi(i + 1) - xi(i - 1)) * (xi(i + 1) - xi(i)))
  54.  
  55.  
  56. def find_der3_val(i):
  57. val = xi(i)
  58. return expr_der3.subs(x, val)
  59.  
  60.  
  61. def R2(w3, i):
  62. return abs(find_der3_val(i) * w3 / 6)
  63.  
  64.  
  65. def W3(i):
  66. return round((inter_point - xi(i - 1)) * (inter_point - xi(i)) * (inter_point - xi(i + 1)), 6)
  67.  
  68.  
  69. def difference1(_x_i, _x_j):
  70. return (func_value(_x_j) - func_value(_x_i)) / (_x_j - _x_i)
  71.  
  72.  
  73. def difference2(_x_i, _x_j, _x_k):
  74. return (difference1(_x_j, _x_k) - difference1(_x_i, _x_j)) / (_x_k - _x_i)
  75.  
  76.  
  77. def N1(i):
  78. return func_value(xi(i)) + difference1(xi(i), xi(i + 1)) * (inter_point - xi(i))
  79.  
  80.  
  81. def N2(i):
  82. return func_value(xi(i - 1)) + difference1(xi(i - 1), xi(i)) * (inter_point - xi(i - 1)) \
  83. + difference2(xi(i - 1), xi(i), xi(i + 1)) * (inter_point - xi(i - 1)) * (inter_point - xi(i))
  84.  
  85.  
  86. a = 0.6
  87. b = 1.1
  88. h = round((b - a) / 10, 2)
  89.  
  90. # TASK 1
  91. pt.printTitle(1)
  92. print_value_table()
  93.  
  94.  
  95. # TASK 2
  96. pt.printTitle(2)
  97. inter_point = 0.92
  98. index = floor((inter_point - a) / h)
  99. lagrange1_value = L1(index)
  100. print('Значение функции по интерполяционной формуле Лагранжа первого порядка = ', lagrange1_value)
  101.  
  102.  
  103. # TASK 3.1
  104. pt.printTitle(3.1)
  105. x = symbols('x')
  106. expr = func_value(x)
  107. expr_der2 = diff(expr, x, 2)
  108. print('Функция: ', expr)
  109. print('Вторая производная', expr_der2)
  110. der2_val1 = find_der2_val(index)
  111. der2_val2 = find_der2_val(index+1)
  112. print('Минимальное значение производной: ', min(der2_val1, der2_val2))
  113. print('Максимальное значение производной: ', max(der2_val1, der2_val2))
  114.  
  115. # TASK 3.2
  116. pt.printTitle(3.2)
  117. w2 = W2(index)
  118. remainder1 = R1(w2, index)
  119. remainder2 = R1(w2, index + 1)
  120. min_remainder = min(remainder1, remainder2)
  121. max_remainder = max(remainder1, remainder2)
  122. print('Минимальное значение остаточного члена: ', min_remainder)
  123. print('Максимальное значение остаточного члена: ', max_remainder)
  124.  
  125.  
  126. # TASK 4
  127. pt.printTitle(4)
  128. true_value = func_value(inter_point)
  129. R1_inter_point = abs(lagrange1_value - true_value)
  130. print(min_remainder, '<', R1_inter_point, '<', max_remainder, 'is ', check(min_remainder, max_remainder, R1_inter_point))
  131.  
  132.  
  133. # TASK 5
  134. pt.printTitle(5)
  135. lagrange2_value = L2(index)
  136. print('Значение функции по интерполяционной формуле Лагранжа второго порядка = ', lagrange2_value)
  137.  
  138.  
  139. # TASK 6.1
  140. pt.printTitle(6.1)
  141. expr_der3 = diff(expr, x, 3)
  142. print('Третья производная: ', expr_der3)
  143. der3_val1 = find_der3_val(index - 1)
  144. der3_val2 = find_der3_val(index + 1)
  145. print('Минимальное значение производной: ', min(der3_val1, der3_val2))
  146. print('Максимальное значение производной: ', max(der3_val1, der3_val2))
  147.  
  148. # TASK 6.2
  149. pt.printTitle(6.2)
  150. w3 = W3(index)
  151. remainder1 = R2(w3, index - 1)
  152. remainder2 = R2(w3, index + 1)
  153. min_remainder = min(remainder1, remainder2)
  154. max_remainder = max(remainder1, remainder2)
  155. print('Минимальное значение остаточного члена:', min_remainder)
  156. print('Максимальное значение остаточного члена:', max_remainder)
  157.  
  158.  
  159. # TASK 7
  160. pt.printTitle(7)
  161. R2_inter_point = abs(lagrange2_value - true_value)
  162. print(min_remainder, '<', R2_inter_point, '<', max_remainder, 'is ', check(min_remainder, max_remainder, R2_inter_point))
  163.  
  164.  
  165. # TASK 8.1
  166. pt.printTitle(8.1)
  167. differ = []
  168. x_i, x_j, x_k = symbols('x_i, x_j, x_k')
  169. differ.append({
  170. 'f(x_i)': func_value(xi(index)),
  171. 'f(x_i, x_j)': difference1(xi(index), xi(index + 1)),
  172. 'f(x_i, x_j, x_k)': difference2(xi(index - 1), xi(index), xi(index + 1))
  173. })
  174. print(pd.DataFrame(differ))
  175.  
  176. # TASK 8.2
  177. pt.printTitle(8.2)
  178. newton1 = N1(index)
  179. print('Значение функции по формуле Ньютона1:', newton1)
  180. newton2 = N2(index)
  181. print('Значение функции по формуле Ньютона2:', newton2)
  182.  
  183. # TASK 8.3
  184. print('Разность интерполяционных формул Лагранжа1 и Ньютона1:', abs(lagrange1_value - newton1))
  185. print('Разность интерполяционных формул Лагранжа2 и Ньютона2:', abs(lagrange2_value - newton2))
  186.  
  187.  
Advertisement
Add Comment
Please, Sign In to add comment