import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)*0.1
fx = np.array([0.97,0.83,0.65,0.54,0.46,0.36,0.29,0.25,0.21,0.17])
p = 1
N = 6 # 階數(shù)
def Neiji(p,a,b):
'''
加權(quán)內(nèi)積,p為加權(quán)值
'''
return p*np.dot(a,b)
def Nihe(x,fx,p,N):
'''
多項(xiàng)式擬合函數(shù)
(x,fx):給定的需要擬合的點(diǎn)
p:加權(quán)內(nèi)積的權(quán)重值
N:多項(xiàng)式階數(shù)
'''
A = np.zeros((N,N))
b = np.zeros((N,1))
for i in range(N):
for j in range(N):
A[i,j] = Neiji(p,x**i,x**j)
b[i,0] = Neiji(p,fx,x**i)
an = np.linalg.solve(A,b) # 多項(xiàng)式擬合模型系數(shù)
return an
an = Nihe(x,fx,p,N)
xx = np.arange(min(x),max(x),0.01) # 做圖橫坐標(biāo)
result = np.sum([an[i]*(xx**i) for i in range(N)],axis=0) # 擬合結(jié)果曲線
plt.scatter(x,fx,c='r')
plt.plot(xx,result)
plt.show()

6階多項(xiàng)式擬合.png