import numpy as np
import matplotlib.pyplot as plt
# Данные
x = np.array([1.0, 1.9, 2.8, 3.7, 4.6, 5.5])
y = np.array([2.4142, 1.0818, 0.50953, 0.11836, -0.24008, -0.66818])
# Функция для вычисления коэффициентов многочлена степени n по методу наименьших
# квадратов
def polynomial_fit(x, y, degree):
# Матрица системы нормальных уравнений
X = np.vander(x, degree + 1)
# Решение системы нормальных уравнений
coeffs = np.linalg.lstsq(X, y, rcond=None)[0]
return coeffs
# Функция для вычисления значений многочлена с заданными коэффициентами
def polynomial_values(x, coeffs):
return np.polyval(coeffs, x)
# Построение графиков
x_plot = np.linspace(1, 5.5, 200)
# Степени многочленов
degrees = [1, 2, 3]
# Построение графиков для каждой степени
plt.figure(figsize=(10, 6))
for degree in degrees:
coeffs = polynomial_fit(x, y, degree)
y_plot = polynomial_values(x_plot, coeffs)
plt.plot(x_plot, y_plot, label=f'Многочлен {degree} ступени')
# Исходные данные
plt.scatter(x, y, color='red', label='Точки')
# Оформление графика
plt.title('Аппроксимация многочленом методом наименьших квадратов')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.show()
Click Run or press shift + ENTER to run code