实验题目:

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

求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()

结果

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐