最小二乘抛物拟合 python
时间: 2023-11-06 12:05:29 浏览: 118
最小二乘抛物拟合是一种利用最小二乘法对一组数据进行拟合的方法,其中拟合函数为二次函数(抛物线)。在Python中,可以使用scipy库中的leastsq方法进行拟合。具体步骤如下:
1. 定义待拟合的数据,即X和Y数组。
2. 定义二次函数的标准形式func(params, x),其中params为待求参数,x为自变量。
3. 定义误差函数error(params, x, y),即拟合曲线所求的值与实际值的差。
4. 使用leastsq方法对参数进行求解,得到最优解Para。
5. 输出最后的结果,包括求解的曲线和拟合效果图。
下面是一个抛物拟合的Python代码示例:
```
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
# 待拟合的数据
X = np.array([1,2,3,4,5,6])
Y = np.array([9.1,18.3,32,47,69.5,94.8])
# 二次函数的标准形式
def func(params, x):
a, b, c = params
return a * x * x + b * x + c
# 误差函数,即拟合曲线所求的值与实际值的差
def error(params, x, y):
return func(params, x) - y
# 对参数求解
def slovePara():
p0 = [10, 10, 10]
Para = leastsq(error, p0, args=(X, Y))
return Para
# 输出最后的结果
def solution():
Para = slovePara()
a, b, c = Para[0]
print("a=",a," b=",b," c=",c)
print("求解的曲线是:")
print("y="+str(round(a,2))+"x*x+"+str(round(b,2))+"x+"+str(c))
plt.figure(figsize=(8,6))
plt.scatter(X, Y, color="green", label="sample data", linewidth=2)
# 画拟合直线
x = np.linspace(0,12,100)
y = a * x * x + b * x + c
plt.plot(x, y, color="red", label="solution line", linewidth=2)
plt.legend() #绘制图例
plt.show()
solution()
```
阅读全文