1. 程式人生 > >matlab曲線擬合

matlab曲線擬合

曲線擬合不要求逼近函式通過各取樣點,但要求儘量的接近這些點,使誤差在某種意義上達到最小。(一)利用函式的方式實現曲線擬合:
在matlab中,用polyfit函式來求得最小二乘擬合多項式的係數,再用polyval函式按所得的多項式計算所給點上的函式近似值。
例子:用一個三次多項式在區間[0:2*pi]內逼近函式sin(x)
在給定區間內均勻選取20個取樣點並計算取樣點的函式值,然後利用3次多項式逼近。
程式碼如下:
x=linspace(0,2*pi,20);
y=sin(x);
p=polyfit(x,y,3)
y1=polyval(p,x)
plot(x,y,':o',x,y1,'-*')
legend('sin(x)','fit')

圖形:


(二)利用曲線擬合工具箱實現
Matlab有一個功能強大的曲線擬合工具箱 cftool ,使用方便,能實現多種型別的線性、非線性曲線擬合,下面簡單介紹如何使用這個工具箱。
假設我們要擬合的函式形式是  y=A*x*x + B*x, 且A>0,B>0 。
1、在命令列輸入資料:
x=[110.3323 148.7328 178.064 202.8258033 224.7105 244.5711 262.908 280.0447 296.204 311.5475];
y=[5 10 15 20 25 30 35 40 45 50];
2、啟動曲線擬合工具箱
命令視窗輸入:cftool
3、進入曲線擬合工具箱介面“Curve Fitting tool”如圖
(1)點選“Data”按鈕,彈出“Data”視窗;
(2)利用X data和Y data的下拉選單讀入資料x,y,可修改資料集名“Data set name”,然後點選“Create data set”按鈕,退出“Data”視窗,返回工具箱介面,這時會自動畫出資料集的曲線圖;
(3)點選“Fitting”按鈕,彈出“Fitting”視窗;
(4)點選“New fit”按鈕,可修改擬合專案名稱“Fit name”,通過“Data set”下拉選單選擇資料集,然後通過下拉選單“Type of fit”選擇擬合曲線的型別,工具箱提供的擬合型別有:
Custom Equations:使用者自定義的函式型別
Exponential:指數逼近,有2種類型, a*exp(b*x) 、 a*exp(b*x) + c*exp(d*x) 
Fourier:傅立葉逼近,有7種類型,基礎型是 a0 + a1*cos(x*w) + b1*sin(x*w)
Gaussian:高斯逼近,有8種類型,基礎型是 a1*exp(-((x-b1)/c1)^2)
Interpolant:插值逼近,有4種類型,linear、nearest neighbor、cubic spline、shape-preserving
Polynomial:多形式逼近,有9種類型,linear ~、quadratic ~、cubic ~、4-9th degree ~
Power:冪逼近,有2種類型,a*x^b 、a*x^b + c
Rational:有理數逼近,分子、分母共有的型別是linear ~、quadratic ~、cubic ~、4-5th degree ~;此外,分子還包括constant型
Smoothing Spline:平滑逼近
Sum of Sin Functions:正弦曲線逼近,有8種類型,基礎型是 a1*sin(b1*x + c1)
Weibull:只有一種,a*b*x^(b-1)*exp(-a*x^b)
選擇好所需的擬合曲線型別及其子型別,並進行相關設定:
——如果是非自定義的型別,根據實際需要點選“Fit options”按鈕,設定擬合算法、修改待估計引數的上下限等引數;
——如果選Custom Equations,點選“New”按鈕,彈出自定義函式等式視窗,有“Linear Equations線性等式”和“General Equations構造等式”兩種標籤。
在本例中選Custom Equations,點選“New”按鈕,選擇“General Equations”標籤,輸入函式型別y=a*x*x + b*x,設定引數a、b的上下限,然後點選OK。
(5)型別設定完成後,點選“Apply”按鈕,就可以在Results框中得到擬合結果,
同時,也會在工具箱視窗中顯示擬合曲線如下圖:
這樣,就完成一次曲線擬合啦,十分方便快捷。當然,如果你覺得擬合效果不好,還可以在“Fitting”視窗點選“New fit”按鈕,按照步驟(4)~(5)進行一次新的擬合。
不過,需要注意的是,cftool 工具箱只能進行單個變數的曲線擬合,即待擬合的公式中,變數只能有一個。對於混合型的曲線,例如 y = a*x + b/x ,工具箱的擬合效果並不好。
另外要說的是,如果想把這個擬合的影象匯出的話,在Curve Fitting Tool視窗的File選單下選Print toFigure,此時彈出一個新的影象視窗,裡面是你要匯出的影象,在這個figure視窗的File選單裡再選Export,選擇好合適的格式,一般是jpeg,選擇好路徑,點選OK就可以了。出來的影象可以在Word等編輯環境中使用,就不多說了。