《用MATLAB作曲線擬合.ppt》由會員分享,可在線閱讀,更多相關(guān)《用MATLAB作曲線擬合.ppt(13頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1. 線性擬合,作多項式f(x)=a1xm+ +amx+am+1擬合,可用以下命令:,a=polyfit(x,y,m),多項式在 x 處的值 y 可用以下命令計算: y=polyval(a,x),MATLAB作曲線擬合,解:輸入以下命令: x=0:0.1:1; y=-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2; A=polyfit(x,y,2) %作出數(shù)據(jù)點和擬合曲線的圖形 z=polyval(A,x); plot(x,y,k+,x,z,r),2)計算結(jié)果: = -9.8108 20.1293 -0.0317,例
2、對下面一組數(shù)據(jù)作二次多項式擬合,(1) lsqcurvefit 已知數(shù)據(jù)點: xdata=(xdata1,xdata2,,xdatan), ydata=(ydata1,ydata2,,ydatan),2.非線性擬合,Matlab的提供了兩個求非線性最小二乘擬合的函數(shù):lsqcurvefit和lsqnonlin。兩個命令都要先建立M-文件fun.m,在其中定義函數(shù)f(x),但兩者定義f(x)的方式是不同的,可參考例題.,lsqcurvefit用以求含參量x(向量)的向量值函數(shù) F(x,xdata)=(F(x,xdata1),,F(xiàn)(x,xdatan))T 中的參變量x(向量),使得,,輸入格
3、式為: (1) x = lsqcurvefit (fun,x0,xdata,ydata); (2) x =lsqcurvefit (fun,x0,xdata,ydata,options); (3) x = lsqcurvefit (fun,x0,xdata,ydata,options,grad); (4) x, options = lsqcurvefit (fun,x0,xdata,ydata,); (5) x, options,funval = lsqcurvefit (fun,x0,xdata,ydata,); (6) x, options,funval, Jacob = lsqcur
4、vefit (fun,x0,xdata,ydata,);,說明:x = lsqcurvefit (fun,x0,xdata,ydata,options);,lsqnonlin用以求含參量x(向量)的向量值函數(shù) f(x)=(f1(x),f2(x),,fn(x))T 中的參量x,使得 最小。 其中 fi(x)=f(x,xdatai,ydatai) =F(x,xdatai)-ydatai,2. lsqnonlin,已知數(shù)據(jù)點: xdata=(xdata1,xdata2,,xdatan) ydata=(ydata1,ydata2,,ydatan),輸入格式為: 1) x=
5、lsqnonlin(fun,x0); 2) x= lsqnonlin (fun,x0,options); 3) x= lsqnonlin (fun,x0,options,grad); 4) x,options= lsqnonlin (fun,x0,); 5) x,options,funval= lsqnonlin (fun,x0,);,說明:x= lsqnonlin (fun,x0,options);,,例2 用下面一組數(shù)據(jù)擬合 中的參數(shù)a,b,k,該問題即解最優(yōu)化問題:,1)編寫M-文件 curvefun1.m function f=curvefun1(x,tdata)
6、 f=x(1)+x(2)*exp(-0.02*x(3)*tdata) %其中 x(1)=a; x(2)=b;x(3)=k;,2)輸入命令 tdata=100:100:1000 cdata=1e-03*4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39, 6.50,6.59; x0=0.2,0.05,0.05; x=lsqcurvefit (curvefun1,x0,tdata,cdata) f= curvefun1(x,tdata),F(x,tdata)= ,x=(a,b,k),解法1. 用命令lsqcurvefit,解法2: 用命令 lsq
7、nonlin f(x)=F(x,tdata,ctada)= x=(a,b,k),1)編寫M-文件 curvefun2.m function f=curvefun2(x) tdata=100:100:1000; cdata=1e-03*4.54,4.99,5.35,5.65,5.90, 6.10,6.26,6.39,6.50,6.59; f=x(1)+x(2)*exp(-0.02*x(3)*tdata)- cdata,2)輸入命令: x0=0.2,0.05,0.05; x=lsqnonlin(curvefun2,x0) f= curvefun2(x),函數(shù)curvefun2的自變
8、量是x,cdata和tdata是已知參數(shù),故應(yīng)將cdata tdata的值寫在curvefun2.m中,可以看出,兩個命令的計算結(jié)果是相同的.,3)運算結(jié)果為: f =0.0043 0.0051 0.0056 0.0059 0.0061 0.0062 0.0062 0.0063 0.0063 0.0063 x = 0.0063 -0.0034 0.2542,4)擬合得a=0.0063 b=-0.0034 k=0.2542,用命令: polyfit(x,y,m),得到 a1=3.3940, a2=702.4918,練習(xí)1 用給定的多項式,如y=x3-6x2+5x-3,產(chǎn)生一組數(shù)據(jù)(xi,yi,i=1,2,,n),再在yi上添加隨機干擾(可用rand產(chǎn)生(0,1)均勻分布隨機數(shù),或用rands產(chǎn)生N(0,1)分布隨機數(shù)),然后用xi和添加了隨機干擾的yi作的3次多項式擬合,與原系數(shù)比較。 如果作2或4次多項式擬合,結(jié)果如何?,練習(xí)2. 已知數(shù)據(jù):,求擬合函數(shù):,