Untitled
unknown
python
2 years ago
1.8 kB
6
Indexable
from math import * def lagrange_interpolation(x_values, y_values, x): if len(x_values) != len(y_values): raise ValueError("Количество точек x и y должно быть одинаковым") n = len(x_values) result = 0.0 for i in range(n): term = y_values[i] for j in range(n): if i != j: term *= (x - x_values[j]) / (x_values[i] - x_values[j]) result += term return result def y_val(x): res = [] for i in x: res.append(log(tan(i/pi))) return res def newton_interpolation(x_values, y_values, x): if len(x_values) != len(y_values): raise ValueError("Количество точек x и y должно быть одинаковым") n = len(x_values) coefficients = y_values.copy() for i in range(1, n): for j in range(n - 1, i - 1, -1): coefficients[j] = (coefficients[j] - coefficients[j - 1]) / (x_values[j] - x_values[j - i]) result = coefficients[-1] for i in range(n - 2, -1, -1): result = result * (x - x_values[i]) + coefficients[i] return result # Пример использования: x_values = [1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7] y_values = y_val(x_values) x = 2.5 result_lagrange = lagrange_interpolation(x_values, y_values, x) result_newton = newton_interpolation(x_values, y_values, x) print(f"Значение интерполяционного полинома (метод Лагранжа) в точке x={x}: {result_lagrange}") print(f"Значение интерполяционного полинома (метод Ньютона) в точке x={x}: {result_newton}") print(f"Значение функции в точке x={x}: {log(tan(x/pi))}")
Editor is loading...