最小二乘法多项式曲线拟合原理与实现

代码:# coding=utf-8”’作者:Jairus Chan程序:多项式曲线拟合算法”’import matplotlib.pyplot as pltimport mathimport numpyimport randomfig = plt.figure()ax = fig.add_subplot(111)#阶数为9阶order=9#生成曲线上的各个点x = numpy.arange(-1,1,0.02)y = [((a*a-1)*(a*a-1)*(a*a-1)+0.5)*numpy.sin(a*2) for a in x]#ax.plot(x,y,color=’r’,linestyle=’-‘,marker=”)#,label="(a*a-1)*(a*a-1)*(a*a-1)+0.5"#生成的曲线上的各个点偏移一下,并放入到xa,ya中去i=0xa=[]ya=[]for xx in x:yy=y[i]d=float(random.randint(60,140))/100#ax.plot([xx*d],[yy*d],color=’m’,linestyle=”,marker=’.’)i+=1xa.append(xx*d)ya.append(yy*d)”’for i in range(0,5):xx=float(random.randint(-100,100))/100yy=float(random.randint(-60,60))/100xa.append(xx)ya.append(yy)”’ax.plot(xa,ya,color=’m’,linestyle=”,marker=’.’)#进行曲线拟合matA=[]for i in range(0,order+1):matA1=[]for j in range(0,order+1):tx=0.0for k in range(0,len(xa)):dx=1.0for l in range(0,j+i):dx=dx*xa[k]tx+=dxmatA1.append(tx)matA.append(matA1)#print(len(xa))#print(matA[0][0])matA=numpy.array(matA)matB=[]for i in range(0,order+1):ty=0.0for k in range(0,len(xa)):dy=1.0for l in range(0,i):dy=dy*xa[k]ty+=ya[k]*dymatB.append(ty) matB=numpy.array(matB)matAA=numpy.linalg.solve(matA,matB)#画出拟合后的曲线#print(matAA)xxa= numpy.arange(-1,1.06,0.01)yya=[]for i in range(0,len(xxa)):yy=0.0for j in range(0,order+1):dy=1.0for k in range(0,j):dy*=xxa[i]dy*=matAA[j]yy+=dyyya.append(yy)ax.plot(xxa,yya,color=’g’,linestyle=’-‘,marker=”)ax.legend()plt.show()运行效果:

,创造条件,去改变生活,做生活的强者.愿你早日成为生活的强者

最小二乘法多项式曲线拟合原理与实现

相关文章:

你感兴趣的文章:

标签云: