python平滑曲线拟合散点,python 三维散点图拟合曲面
使用Python的数据拟合文章目录使用Python的数据拟合多项式拟合非多项式拟合
多项式拟合任何函数都可以分解成与函数相似的多项式表达式。
多项式拟合需要的函数是numpy库的np.polyfit,使用方法如下:
NP.polyfit(x,y,deg,rcond=None,full=False,w=None,cov=False))基于与已知x和y相对应的值,使用th DDP乘法原理。
p(x))p0xdegp 1 xdeg 1 pdegp(x))x ^ { deg } p { _ 1 } x ^ { deg-1 } p _ { deg } p)x)=P0 xde gp1 xde gp1 xde gp)
返回一系列系数pp。
参数描述:
通常,只使用前三个参数。
x数组类型,shape (m,)m采样点的x坐标)x[i],y[i]) yarray类型,shape (m,)or) m,k),采样点的y坐标。符合degint类型的常数和多项式的最高阶项。返回值:
p p的各种系数和p p的个数是d例如1 deg 1 deg 1。还可以使用polyval()来计算要预测的多项式的值。
importmatplotlib . pyplotaspltimportnumpyasnpif _ _ name _= _ main _ 3360 x=NP . arange(1,31))
18,220,257,300,350,409,478,558,651,760,887,1035,1208,1410]) Z1=NP。polyfit (x,Y,3) #曲线拟合,返回值多项式表达式的系数p1=np.poly1d(z1) #即函数式子print(p1) y_pred=p1(x) #根据函数的多项式表达式求解y #print(np.polyval(p1,29)) #根据多项式求解特定X对应的Y值#print(np.polyval(z1,29)) #根据多项式plot1=标题(“”)PLT。Xlabel( )工厂。Ylabel( )工厂。Legend (loc=3,BorderAxSpad=0。BBOX _ to _锚点
20.1215x-3.045x28.62x-34.47,拟合的函数为y=0.1215 x 3.045 x 2 28.62 x 34.47y=0.1215 x { 3 }-3.045 x { 2 } 28.62 x-34.47y=0.127y。
将拟合曲线与原始数据进行比较,发现拟合效果良好。
非多项式拟合如果需要多项式拟合,前提是必须大致知道散乱点的近似曲线形式,即近似函数形式。
比如例子中的散乱点看起来像指数函数分布,那么可以给出一个假设函数。
y=b a x c y=ba{^x}
所以只要给定具体的函数形式(可以是任意的,只要能写出来了),就可以用最thddp乘法来近似拟合,也就是可以求出函数的系数。
此时使用scipy.optimize包下的curve_fit函数:
代码示例:
导入matplotlib。py绘图为pltimport numpy,NP来自scipy。优化导入曲线_ fitdef func(x,a,b,c): return b * np.power(a,x)cif _ _ name _ _= _ _ main _ _ :x=NP。arange(1,31,1) y=np.array([20,23,26,29,32,35,38,45,53,62,73,86,101,111曲线拟合,popt为函数的参数list y_pred=[func(i,popt[0],popt[1],popt[2]) for i in x] #直接用函数和函数参数目录来进行y值的计算print(popt) plot1=plt.plot(x,y, * ,label=原始值)plot 2=PLT。plot(x,y_pred, r ,label= fit values )。标题()PLT。xlabel()PLT。ylabel()工厂。legend(loc=3,borderaxespad=0 .bbox_to_anchor=(0,0)) plt.show()输出结果为:
[ 1.16791847 13.39168878 1.24633841] 那么就有
{ a=1.16791847 b=13.39168878 c=1.24633841 \ left \ begin { aligned } a=\ 1.16791847 \ \ b=\ 13.39168878 \ \ c=1.24633841 \ end { aligned } \ right。abc===1.167918 .36866 .86868668667
于是我们得到了拟合的函数为
y=13.391688781.16791847 x 1.24633841 y=13.39168878*1.16791847{^x} 1.24633841y=13.391688781.16791847 x 1.24633841
将拟合的曲线与原数据各点进行对比发现拟合效果良好。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。