最小二乘拟合法及作图(python实现)
最小二乘法拟合算法
·
实验题目:
理论分析我就不多说,就是按照数值分析中求法方程的方法,过程可以对照书上。
求n次多项式拟合曲线的过程:
1,求出向量1到n,代码中用了f二维数组存储
2,求出法方程组的系数A
3,求出i与y的内积
4,用numpy库求解即可
代码
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=[0,0.1,0.2,0.3,0.5,0.8,1]
y=[1,0.41,0.5,0.61,0.91,2.02,2.46]
x=np.array(x)
y=np.array(y)
x_test=np.linspace(0,1,100)
#三次多项式为例子,改变n的值即可求n次多项式
n=3
f=[]
for i in range(n+1):#算fi向量
l=[]
for j in range(len(x)):
l.append(pow(x[j],i))
f.append(l)
f=np.array(f)
A=[]
b=[]
for i in range(n+1):
l=[]
b.append(np.dot(f[i],y))#作内积,fi与y的
for j in range(n+1):
tmp=np.dot(f[i],f[j])#作内积,每个fi与fj的,其实是对称矩阵,可以优化
l.append(tmp)
A.append(l)
A=np.array(A)
b=np.array(b)
a=np.linalg.solve(A,b)#numpy自带的求多元一次方程组函数
plt.figure()
y_=[]
for i in range(len(x_test)):
tmp=0
for j in range(len(a)):
tmp+=a[j]*pow(x_test[i],j)
y_.append(tmp)
plt.scatter(x,y,label="原函数点",c='orange')
plt.plot(x_test,y_,label="3次多项式拟合曲线")
plt.title("拟合结果")
plt.legend()
plt.show()
结果
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)