最小二乘拟合法及作图(python实现)

实验题目:

理论分析我就不多说,就是按照数值分析中求法方程的方法,过程可以对照书上。

求n次多项式拟合曲线的过程:

1,求出向量\varphi1到\varphin,代码中用了f二维数组存储

2,求出法方程组的系数A

3,求出\varphii与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()

结果

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好家伙129

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值