Max_Leb

Untitled

Mar 15th, 2023
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.30 KB | None | 0 0
  1. from math import *
  2.  
  3. import pandas as pd
  4.  
  5. from sympy import *
  6.  
  7.  
  8. def __X(_i):
  9.     return a + _i * h
  10.  
  11.  
  12. def func(_x):
  13.     return _x ** 3 - sin(_x)
  14.  
  15.  
  16. def L1(_i):
  17.     return func(__X(_i)) * (sx - __X(_i + 1)) / (__X(_i) - __X(_i + 1)) \
  18.                  + func(__X(_i + 1)) * (sx - __X(_i)) / (__X(_i + 1) - __X(_i))
  19.  
  20.  
  21. def W2(_i):
  22.     return round((sx - __X(_i)) * (sx - __X(_i+1)), 4)
  23.  
  24.  
  25. def W3(_i):
  26.     return round((sx - __X(_i-1)) * (sx - __X(_i)) * (sx - __X(_i+1)), 6)
  27.  
  28.  
  29. def deriv_2(_i):
  30.     value = __X(_i)
  31.     _x = symbols('x')
  32.     _expr = func(x)
  33.     exp_deriv = diff(_expr, _x, 2)
  34.     return exp_deriv.subs(_x, value)
  35.  
  36.  
  37. def deriv_3(_i):
  38.     value = __X(_i)
  39.     _x = symbols('x')
  40.     _expr = func(x)
  41.     exp_deriv = diff(_expr, _x, 3)
  42.     return exp_deriv.subs(_x, value)
  43.  
  44.  
  45. def R1(_w2, _i):
  46.     return abs(deriv_2(_i) * w2 / 2)
  47.  
  48.  
  49. def R2(_w3, _i):
  50.     return abs(deriv_3(_i) * w3 / 6)
  51.  
  52.  
  53. def check(min_rem, max_rem, true_rem):
  54.     if true_rem >= max_rem or true_rem <= min_rem:
  55.         return false
  56.     return true
  57.  
  58.  
  59. def L2(_i):
  60.     return func(__X(_i-1)) * ((sx - __X(_i)) * (sx - __X(_i+1))) / ((__X(_i-1) - __X(_i)) * (__X(_i-1) - __X(_i+1))) \
  61.            +func(__X(_i)) * ((sx - __X(_i-1)) * (sx - __X(_i + 1))) / ((__X(_i) - __X(_i-1)) * (__X(_i) - __X(_i + 1)))\
  62.            +func(__X(_i+1)) * ((sx - __X(_i-1)) * (sx - __X(_i))) / ((__X(_i+1) - __X(_i-1)) * (__X(_i+1) - __X(_i)))
  63.  
  64.  
  65. def difference1(_x_i, _x_j):
  66.     return (func(_x_j) - func(_x_i)) / (_x_j - _x_i)
  67.  
  68.  
  69. def difference2(_x_i, _x_j, _x_k):
  70.     return (difference1(_x_j, _x_k) - difference1(_x_i, _x_j)) / (_x_k - _x_i)
  71.  
  72.  
  73. def N1(_i):
  74.     return func(__X(_i)) + difference1(__X(_i), __X(_i+1)) * (sx - __X(_i))
  75.  
  76.  
  77. def N2(_i):
  78.     return func(__X(_i-1)) + difference1(__X(_i-1), __X(_i)) * (sx - __X(_i-1)) \
  79.            + difference2(__X(_i-1), __X(_i), __X(_i+1)) * (sx - __X(_i-1)) * (sx - __X(_i))
  80.  
  81.  
  82. # def difference1(_i, _j):
  83. #     return (func(__X(_j)) - func(__X(_i))) / (__X(_j) - __X(_i))
  84. #
  85. #
  86. # def difference2(_i, _j, _k):
  87. #     return (difference1(_j, _k) - difference1(_i, _j)) / (__X(_k) - __X(_i))
  88. #
  89. #
  90. # def N1(_i):
  91. #     return func(__X(_i)) + difference1(_i, _i+1) * (sx - __X(_i))
  92. #
  93. #
  94. # def N2(_i):
  95. #     return func(__X(_i-1)) + difference1(_i-1, _i) * (sx - __X(_i-1)) \
  96. #            + difference2(_i-1, _i, _i+1) * (sx - __X(_i-1)) * (sx - __X(_i))
  97.  
  98.  
  99. # 1
  100. print('----------------------------------1------------------------------------')
  101.  
  102. a = 0.6
  103. b = 1.1
  104. h = round((b - a) / 10, 2)
  105.  
  106. d = []
  107. for i in range(0, 11, 1):
  108.     x = __X(i)
  109.     y = round(func(x), 2)
  110.     d.append({
  111.         'x': x,
  112.         'y': y
  113.     })
  114. print(pd.DataFrame(d))
  115.  
  116. # 2
  117. print('----------------------------------2------------------------------------')
  118. sx = 0.92
  119. index = floor((sx - a) / h)
  120. lagrange1 = L1(index)
  121. print('Значение функции по формуле Лагранжа1: ', lagrange1)
  122.  
  123. # 3
  124. print('---------------------------------3------------------------------------')
  125.  
  126. x = symbols('x')
  127. expr = func(x)
  128. derivative_2 = diff(expr, x, 2)
  129. print('Функция:', expr)
  130. print('Вторая производная:', derivative_2)
  131. der2_val_1 = deriv_2(index)
  132. der2_val_2 = deriv_2(index+1)
  133. print('Минимальное значение производной:', min(der2_val_1, der2_val_2))
  134. print('Максимальное значение производной:', max(der2_val_1, der2_val_2))
  135.  
  136. print('------------------------')
  137.  
  138. w2 = W2(index)
  139. remainder1_1 = R1(w2, index)
  140. remainder1_2 = R1(w2, index+1)
  141. min_rem1 = min(remainder1_1, remainder1_2)
  142. max_rem1 = max(remainder1_1, remainder1_2)
  143. print('Минимальное значение остаточного члена:', min_rem1)
  144. print('Максимальное значение остаточного члена:', max_rem1)
  145.  
  146. # 4
  147. print('----------------------------------4------------------------------------')
  148.  
  149. true_value = func(sx)
  150. # print('Значение функции:', true_value)
  151. R1_sx = abs(lagrange1 - true_value)
  152. print('Значение остатка:', R1_sx)
  153. print(min_rem1, '<', R1_sx, '<', max_rem1, 'is', check(min_rem1, max_rem1, R1_sx))
  154.  
  155. # 5
  156. print('----------------------------------5------------------------------------')
  157. lagrange2 = (L2(index))
  158. print('Значение функции по формуле Лагранжа2: ', lagrange2)
  159.  
  160. # 6
  161. print('----------------------------------6------------------------------------')
  162. derivative_3 = diff(expr, x, 3)
  163. print('Третья производная:', derivative_3)
  164. der3_val_1 = deriv_3(index-1)
  165. der3_val_2 = deriv_3(index+1)
  166. print('Минимальное значение производной:', min(der3_val_1, der3_val_2))
  167. print('Максимальное значение производной:', max(der3_val_1, der3_val_2))
  168.  
  169. print('------------------------')
  170.  
  171. w3 = W3(index)
  172. remainder2_1 = R2(w3, index-1)
  173. remainder2_2 = R2(w3, index+1)
  174. min_rem2 = min(remainder2_1, remainder2_2)
  175. max_rem2 = max(remainder2_1, remainder2_2)
  176. print('Минимальное значение остаточного члена:', min_rem2)
  177. print('Максимальное значение остаточного члена:', max_rem2)
  178.  
  179. R2_sx = abs(lagrange2 - true_value)
  180. print('Значение остатка:', R2_sx)
  181. print(min_rem2, '<', R2_sx, '<', max_rem2, 'is', check(min_rem2, max_rem2, R2_sx))
  182.  
  183. # 7
  184. print('----------------------------------7------------------------------------')
  185.  
  186.  
  187. differ = []
  188. x_i, x_j, x_k = symbols('x_i, x_j, x_k')
  189. differ.append({
  190.     'f(x_i)': func(__X(index)),
  191.     'f(x_i, x_j)': difference1(__X(index), __X(index+1)),
  192.     'f(x_i, x_j, x_k)': difference2(__X(index-1), __X(index), __X(index+1))
  193. })
  194. print(pd.DataFrame(differ))
  195.  
  196. print('------------------------')
  197.  
  198. newton1 = N1(index)
  199. print('Значение функции по формуле Ньютона1:', newton1)
  200. newton2 = N2(index)
  201. print('Значение функции по формуле Ньютона2:', newton2)
  202.  
  203. # 8
  204. print('----------------------------------8------------------------------------')
  205.  
  206. print('Разность интерполяционных формул Лагранжа1 и Ньютона1:', abs(lagrange1 - newton1))
  207. print('Разность интерполяционных формул Лагранжа2 и Ньютона2:', abs(lagrange2 - newton2))
Add Comment
Please, Sign In to add comment