Max_Leb

Untitled

May 17th, 2023
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.39 KB | None | 0 0
  1. from sympy import *
  2. import pandas as pd
  3. import numpy as np
  4. import matplotlib as plt
  5. import math as mt
  6.  
  7. def func(x):
  8. return x**3 - sin(x)
  9.  
  10. a = 0.6
  11. b = 1.1
  12. h = round((b - a) / 10, 2)
  13. x = symbols('x')
  14. expr = func(x)
  15. print('Функция:', expr)
  16.  
  17. n = 4
  18. m = 1
  19. k = 1
  20.  
  21. test_data = []
  22. for i in range(5):
  23. test_data.append({
  24. 'x': symbols(f"x_{i}"),
  25. 'y': symbols(f"f_{i}")
  26. })
  27. arr_x = []
  28. for i in range(0, 11):
  29. arr_x.append(a+i*h)
  30.  
  31. def X(i):
  32. return a+i*h
  33.  
  34. def L_n(x, h, data_1, n):
  35. L_n = 0
  36. for j in range(0, n+1):
  37. term = data_1[j]['y']
  38. for i in range(0, n+1):
  39. if i!=j:
  40. term*=(x-i*h)/((j-i) * test_h)
  41. L_n += term
  42. return L_n
  43.  
  44.  
  45. x = symbols('x')
  46. test_h = symbols('h')
  47. beta_Lagrange_4 = L_n(x, test_h, test_data, n)
  48. print("Многочлен Лагранжа при n=4 в общем виде при подстановке h(i-j) вместо x_i-x_j:")
  49. beta_Lagrange_4
  50.  
  51. data1 = []
  52. for i in range(5):
  53. data1.append({
  54. 'x': X(i),
  55. 'y': symbols(f"f_{i}")
  56. })
  57. Lagrange_4 = beta_Lagrange_4.as_poly().args[0]
  58.  
  59. exp_deriv = 1
  60. def deriv_by_x(function, value, k):
  61. global exp_deriv
  62. _x = symbols('x')
  63. exp_deriv = diff(function, _x, k)
  64. return exp_deriv.subs(_x, value)
  65.  
  66. Lagrange_derivative = deriv_by_x(Lagrange_4, m*test_h, k)
  67. print("Производная многочлена Лагранжа при n = 4 (L_4_1(x)):")
  68. exp_deriv
  69.  
  70. print("Производная многочлена Лагранжа при n = 4 при подстановке x = m*h (L_4_1(x_m)):")
  71. Lagrange_derivative
  72.  
  73. y_values = []
  74. for i in range(5):
  75. y_values.append(func(X(i)))
  76.  
  77. for i in range(5):
  78. Lagrange_derivative = Lagrange_derivative.subs(data1[i]['y'], y_values[i])
  79. Lagrange_derivative = Lagrange_derivative.subs(test_h, h)
  80. print("Значение производной многочлена Лагранжа в точке x_m:")
  81. Lagrange_derivative
  82.  
  83. def w(arr, x, n):
  84. w = 1
  85. for i in range (0, n+1):
  86. w *= x-arr[i]
  87. return w
  88.  
  89. def multiplier(function, n, dot):
  90. x = symbols('x')
  91. exp_deriv = diff(expr, x, n+1)
  92. return exp_deriv.subs(x, dot)
  93.  
  94. def remainder(arr, x, dot, n):
  95. return multiplier(expr, n, dot) / mt.factorial(n+1) * w(arr, x, n)
  96.  
  97. beta_remainder_l = remainder(arr_x, x, a, n)
  98. Remainder_l = beta_remainder_l.as_poly().args[0]
  99. print("Остаток в точке ξ = a:")
  100. Remainder_l
  101.  
  102. Remainder_l_1 = abs(deriv_by_x(Remainder_l, X(m), k))
  103. print("Остаток в точке ξ = a, x = x_m:")
  104. Remainder_l_1
  105.  
  106. beta_remainder_r = remainder(arr_x, x, X(n), n)
  107. Remainder_r = beta_remainder_r.as_poly().args[0]
  108. print("Остаток в точке ξ = x_n:")
  109. Remainder_r
  110.  
  111. Remainder_r_1 = abs(deriv_by_x(Remainder_r, X(m), k))
  112. print("Остаток в точке ξ = x_n, x = x_m:")
  113. Remainder_r_1
  114.  
  115. def check(min_rem, max_rem, true_rem):
  116. if true_rem >= max_rem or true_rem <= min_rem:
  117. return false
  118. return true
  119.  
  120. min_remainder_1 = min(Remainder_l_1, Remainder_r_1)
  121. max_remainder_1 = max(Remainder_l_1, Remainder_r_1)
  122.  
  123. Real_derivative = deriv_by_x(expr, X(m), k)
  124. remainder_4_1 = abs(Lagrange_derivative - Real_derivative)
  125. print('Значение остатка:', remainder_4_1)
  126. print(min_remainder_1, '<', remainder_4_1, '<', max_remainder_1, 'is', check(min_remainder_1, max_remainder_1, remainder_4_1))
Advertisement
Add Comment
Please, Sign In to add comment