python多项式拟合之np.polyfit 和 np.polyld详解
python数据拟合主要可采用numpy库,库的安装可直接用pipinstallnumpy等。
1.原始数据:假如要拟合的数据yyy来自sin函数,np.sin
importnumpyasnp importmatplotlib.pyplotasplt xxx=np.arange(0,1000)#x值,此时表示弧度 yyy=np.sin(xxx*np.pi/180)#函数值,转化成度
2.测试不同阶的多项式,例如7阶多项式拟合,使用np.polyfit拟合,np.polyld得到多项式系数
z1=np.polyfit(xxx,yyy,7)#用7次多项式拟合,可改变多项式阶数; p1=np.poly1d(z1)#得到多项式系数,按照阶数从高到低排列 print(p1)#显示多项式
3.求对应xxx的各项拟合函数值
yvals=p1(xxx)#可直接使用yvals=np.polyval(z1,xxx)
4.绘图如下
plt.plot(xxx,yyy,'*',label='originalvalues') plt.plot(xxx,yvals,'r',label='polyfitvalues') plt.xlabel('xaxis') plt.ylabel('yaxis') plt.legend(loc=4)#指定legend在图中的位置,类似象限的位置 plt.title('polyfitting') plt.show()
5.np.polyfit函数:采用的是最小二次拟合,numpy.polyfit(x,y,deg,rcond=None,full=False,w=None,cov=False),前三个参数是必须的
官方文档:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.polyfit.html
6.np.polyld函数:得到多项式系数,主要有三个参数
Aone-dimensionalpolynomialclass. Aconvenienceclass,usedtoencapsulate"natural"operationson polynomialssothatsaidoperationsmaytakeontheircustomary formincode(seeExamples). Parameters ---------- c_or_r:array_like Thepolynomial'scoefficients,indecreasingpowers,orif thevalueofthesecondparameterisTrue,thepolynomial's roots(valueswherethepolynomialevaluatesto0).Forexample, ``poly1d([1,2,3])``returnsanobjectthatrepresents :math:`x^2+2x+3`,whereas``poly1d([1,2,3],True)``returns onethatrepresents:math:`(x-1)(x-2)(x-3)=x^3-6x^2+11x-6`. r:bool,optional IfTrue,`c_or_r`specifiesthepolynomial'sroots;thedefault isFalse. variable:str,optional Changesthevariableusedwhenprinting`p`from`x`to`variable` (seeExamples).
参数1表示:在没有参数2(也就是参数2默认False时),参数1是一个数组形式,且表示从高到低的多项式系数项,例如参数1为[4,5,6]表示:
参数2表示:为True时,表示将参数1中的参数作为根来形成多项式,即参数1为[4,5,6]时表示:(x-4)(x-5)(x-6)=0,也就是:
参数3表示:换参数标识,用惯了x,可以用t,s之类的
用法:
1.直接进行运算,例如多项式的平方,分别得到
xx=np.poly1d([1,2,3]) print(xx) yy=xx**2#求平方,或者用xx*xx print(yy)
2.求值:
yy(1)=36
3.求根:即等式为0时的未知数值
yy.r
4.得到系数形成数组:
yy.c为:array([1,4,10,12,9])
5.返回最高次幂数:
yy.order=4
6.返回系数:
yy[0]——表示幂为0的系数
yy[1]——表示幂为1的系数
总结
以上所述是小编给大家介绍的python多项式拟合之np.polyfit和np.polyld详解,希望对大家有所帮助,也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。