Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- from math import *
- import pandas as pd
- import titleprint as pt
- from sympy import *
- def xi(i):
- return a + i * h
- def func_value(x):
- return x**3 - sin(x)
- def print_value_table():
- values = []
- for i in range(0, 11):
- x = xi(i)
- y = round(func_value(x), 2)
- values.append({'x' : x, 'y' : y})
- print(pd.DataFrame(values))
- def L1(i):
- return func_value(xi(i)) * (inter_point - xi(i + 1)) \
- / (xi(i) - xi(i + 1)) + func_value(xi(i + 1)) \
- * (inter_point - xi(i)) / (xi(i + 1) - xi(i))
- def find_der2_val(i):
- val = xi(i)
- return expr_der2.subs(x, val)
- def R1(w2, i):
- return abs(find_der2_val(i) * w2 / 2)
- def W2(i):
- return round((inter_point - xi(i)) * (inter_point - xi(i + 1)), 4)
- def check(min_value, max_value, true_value):
- if true_value >= max_value or true_value <= min_value:
- return false
- return true
- def L2(i):
- 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))) \
- + func_value(xi(i)) * ((inter_point - xi(i - 1)) * (inter_point - xi(i + 1))) / ((xi(i) - xi(i - 1)) * (xi(i) - xi(i + 1))) \
- + 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)))
- def find_der3_val(i):
- val = xi(i)
- return expr_der3.subs(x, val)
- def R2(w3, i):
- return abs(find_der3_val(i) * w3 / 6)
- def W3(i):
- return round((inter_point - xi(i - 1)) * (inter_point - xi(i)) * (inter_point - xi(i + 1)), 6)
- def difference1(_x_i, _x_j):
- return (func_value(_x_j) - func_value(_x_i)) / (_x_j - _x_i)
- def difference2(_x_i, _x_j, _x_k):
- return (difference1(_x_j, _x_k) - difference1(_x_i, _x_j)) / (_x_k - _x_i)
- def N1(i):
- return func_value(xi(i)) + difference1(xi(i), xi(i + 1)) * (inter_point - xi(i))
- def N2(i):
- return func_value(xi(i - 1)) + difference1(xi(i - 1), xi(i)) * (inter_point - xi(i - 1)) \
- + difference2(xi(i - 1), xi(i), xi(i + 1)) * (inter_point - xi(i - 1)) * (inter_point - xi(i))
- a = 0.6
- b = 1.1
- h = round((b - a) / 10, 2)
- # TASK 1
- pt.printTitle(1)
- print_value_table()
- # TASK 2
- pt.printTitle(2)
- inter_point = 0.92
- index = floor((inter_point - a) / h)
- lagrange1_value = L1(index)
- print('Значение функции по интерполяционной формуле Лагранжа первого порядка = ', lagrange1_value)
- # TASK 3.1
- pt.printTitle(3.1)
- x = symbols('x')
- expr = func_value(x)
- expr_der2 = diff(expr, x, 2)
- print('Функция: ', expr)
- print('Вторая производная', expr_der2)
- der2_val1 = find_der2_val(index)
- der2_val2 = find_der2_val(index+1)
- print('Минимальное значение производной: ', min(der2_val1, der2_val2))
- print('Максимальное значение производной: ', max(der2_val1, der2_val2))
- # TASK 3.2
- pt.printTitle(3.2)
- w2 = W2(index)
- remainder1 = R1(w2, index)
- remainder2 = R1(w2, index + 1)
- min_remainder = min(remainder1, remainder2)
- max_remainder = max(remainder1, remainder2)
- print('Минимальное значение остаточного члена: ', min_remainder)
- print('Максимальное значение остаточного члена: ', max_remainder)
- # TASK 4
- pt.printTitle(4)
- true_value = func_value(inter_point)
- R1_inter_point = abs(lagrange1_value - true_value)
- print(min_remainder, '<', R1_inter_point, '<', max_remainder, 'is ', check(min_remainder, max_remainder, R1_inter_point))
- # TASK 5
- pt.printTitle(5)
- lagrange2_value = L2(index)
- print('Значение функции по интерполяционной формуле Лагранжа второго порядка = ', lagrange2_value)
- # TASK 6.1
- pt.printTitle(6.1)
- expr_der3 = diff(expr, x, 3)
- print('Третья производная: ', expr_der3)
- der3_val1 = find_der3_val(index - 1)
- der3_val2 = find_der3_val(index + 1)
- print('Минимальное значение производной: ', min(der3_val1, der3_val2))
- print('Максимальное значение производной: ', max(der3_val1, der3_val2))
- # TASK 6.2
- pt.printTitle(6.2)
- w3 = W3(index)
- remainder1 = R2(w3, index - 1)
- remainder2 = R2(w3, index + 1)
- min_remainder = min(remainder1, remainder2)
- max_remainder = max(remainder1, remainder2)
- print('Минимальное значение остаточного члена:', min_remainder)
- print('Максимальное значение остаточного члена:', max_remainder)
- # TASK 7
- pt.printTitle(7)
- R2_inter_point = abs(lagrange2_value - true_value)
- print(min_remainder, '<', R2_inter_point, '<', max_remainder, 'is ', check(min_remainder, max_remainder, R2_inter_point))
- # TASK 8.1
- pt.printTitle(8.1)
- differ = []
- x_i, x_j, x_k = symbols('x_i, x_j, x_k')
- differ.append({
- 'f(x_i)': func_value(xi(index)),
- 'f(x_i, x_j)': difference1(xi(index), xi(index + 1)),
- 'f(x_i, x_j, x_k)': difference2(xi(index - 1), xi(index), xi(index + 1))
- })
- print(pd.DataFrame(differ))
- # TASK 8.2
- pt.printTitle(8.2)
- newton1 = N1(index)
- print('Значение функции по формуле Ньютона1:', newton1)
- newton2 = N2(index)
- print('Значение функции по формуле Ньютона2:', newton2)
- # TASK 8.3
- print('Разность интерполяционных формул Лагранжа1 и Ньютона1:', abs(lagrange1_value - newton1))
- print('Разность интерполяционных формул Лагранжа2 и Ньютона2:', abs(lagrange2_value - newton2))
Advertisement
Add Comment
Please, Sign In to add comment