数值分析第三章17
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font",family='Adobe Song Std')#字体
# 你的数据
X = np.array([19, 25, 31, 38, 44])
y = np.array([19, 32.3, 49.0, 73.3, 97.8])
# 二次曲线拟合函数:y = ax^2 + b
def quadratic_fit(X, y):
# 构建设计矩阵,只包含 X^2 和常数项
X_matrix = np.vstack([X**2, np.ones(len(X))]).T
# 使用最小二乘法求解
a, b = np.linalg.lstsq(X_matrix, y, rcond=None)[0]
return a, b
# 拟合二次曲线
a, b = quadratic_fit(X, y)
print(f"拟合的二次曲线方程: y = {a:.7f}x^2 + {b:.7f}")
# 生成拟合曲线的数据
X_fit = np.linspace(min(X), max(X), 100)
y_fit = a * X_fit**2 + b
# 绘制原始数据点和拟合曲线
plt.scatter(X, y, label='数据点')
plt.plot(X_fit, y_fit, color='red', label='拟合二次曲线')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.title('最小二乘法拟合二次曲线')
plt.show()
拟合的二次曲线方程: y = 0.0500351x^2 + 0.9725787