本文通過實(shí)例對MATLAB曲線擬合工具箱進(jìn)行詳細(xì)講解,幫助大家更容易理解曲線擬合工具箱(cftool)。
1.實(shí)例介紹
已知
x = [0 0.2 0.50.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0];
y = [1.27792.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.00311.1233 1.1583];
并且根據(jù)某種物理或數(shù)學(xué)關(guān)系確定y=f(x)的表達(dá)形式,并求出擬合結(jié)果對應(yīng)的系數(shù)。
2. 進(jìn)入曲線擬合工具箱界面
兩種方法,第一種:
打開app欄的曲線擬合工具箱(Curve Fitting),
第二種,直接在命令行窗口輸入“cftool”:
進(jìn)入界面后,彈出如下窗口:
3. 加載數(shù)據(jù)
新建一個(gè).m文件,并寫入如下代碼:
clc;clear;
x = [0 0.2 0.5 0.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0];
y = [1.2779 2.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.0031 1.1233 1.1583];
作為要擬合曲線所需要的數(shù)據(jù)。
4. 加載數(shù)據(jù)
在上述窗口中選中相應(yīng)數(shù)據(jù)和擬合選項(xiàng):
5. 選擇擬合曲線的類型
通過下拉菜單選擇擬合曲線的類型,
工具箱提供的擬合類型有:
- Custom Equations:用戶自定義的函數(shù)類型;
- Exponential:指數(shù)逼近,有2種類型, a ? e x p ( b ? x ) a*exp(b*x) a?exp(b?x) 、 a ? e x p ( b ? x ) + c ? e x p ( d ? x ) a*exp(b*x) + c*exp(d*x) a?exp(b?x)+c?exp(d?x);
- Fourier:傅立葉逼近,有7種類型,基礎(chǔ)型是 a 0 + a 1 ? c o s ( x ? w ) + b 1 ? s i n ( x ? w ) a0 + a1*cos(x*w) + b1*sin(x*w) a0+a1?cos(x?w)+b1?sin(x?w);
- Gaussian:高斯逼近,有8種類型,基礎(chǔ)型是 a 1 ? e x p ( ? ( ( x ? b 1 ) / c 1 ) 2 ) a1*exp(-((x-b1)/c1)^2) a1?exp(?((x?b1)/c1)2);
- Interpolant:插值逼近,有4種類型,Nearest neighbor、Linear、Cubic、Shape-preserving(PCHIP);
- Linear Fitting:線性擬合;
- Polynomial:多形式逼近;
- Power:冪逼近,有2種類型, a ? x b a*x^b a?xb 、 a ? x b + c a*x^b + c a?xb+c;
- Rational:有理數(shù)逼近;
- Smoothing Spline:平滑逼近;
- Sum of Sin Functions:正弦曲線逼近,有8種類型,基礎(chǔ)型是 a 1 ? s i n ( b 1 ? x + c 1 ) a1*sin(b1*x + c1) a1?sin(b1?x+c1);
- Weibull:只有一種, a ? b ? x ( b ? 1 ) ? e x p ( ? a ? x b ) a*b*x^(b-1)*exp(-a*x^b) a?b?x(b?1)?exp(?a?xb);
6. 進(jìn)行曲線擬合
假設(shè)我們以
y
=
a
?
s
i
n
(
b
?
x
)
?
e
x
p
(
c
?
x
)
+
d
y =a*sin(b*x)*exp(c*x)+d
y=a?sin(b?x)?exp(c?x)+d的表達(dá)形式進(jìn)行擬合,則選擇”Custom Equation”,在方框中輸入相應(yīng)的函數(shù)表達(dá)式,擬合過程及結(jié)果圖像如下圖所示:
可以發(fā)現(xiàn),曲線和擬合程度較差。這是因?yàn)?,對同一問題的擬合情況,每次可能都不一樣,這取決對于參數(shù)a,b,c,d的StartPoint的選取。解決方法是在擬合過程中,將a,b,c和d也作為約束擬合的條件,例子中已知a,b,c,d的的取值范圍(正負(fù)范圍),可以進(jìn)行如下操作,點(diǎn)擊[Fit Options]按鈕,彈出的窗口如下:
可以調(diào)整a,b,c,d參數(shù)的StartPoint,Lower,Upper三個(gè)選項(xiàng)來是擬合更加準(zhǔn)確,比如說,將a,b,d的Lower選項(xiàng)設(shè)為0(a,b,d>0),將c的Upper選項(xiàng)設(shè)為0(c<0),設(shè)置如下圖所示:
設(shè)置完畢之后,就會(huì)自動(dòng)出現(xiàn)重新擬合之后的圖像,如下圖所示。
可以看到,擬合程度較之前有了很大的提高.因此,可以預(yù)見的是,在擬合過程中,設(shè)置好待擬合函數(shù)的參數(shù)的StartPoint,Lower和Upper三者的值可以使擬合更加準(zhǔn)確。
7. 擬合結(jié)果分析
在左側(cè)的Result中顯示擬合模型、參數(shù)以及擬合效果:
擬合效果評測:
- SSE:擬合誤差平方和,接近0,表示與數(shù)據(jù)擬合的好,但是要小心過擬合;
- R-Square:實(shí)測數(shù)據(jù)與推理數(shù)據(jù)之間的相關(guān)系數(shù)平方值,趨近于1較好;
- RMSE:均方差;
8.其他常用擬合方法
當(dāng)然,除了上面提到的擬合方法之外,還有兩種常用的擬合方法:
-
Interpolant
插值逼近,該方法的優(yōu)勢在于會(huì)連接所有點(diǎn),而使其SSE為0,R-square為1,如下圖所示: -
Smoothing Spline
平滑逼近,該方法的會(huì)盡可能逼近所有點(diǎn),使其SSE盡可能逼近0,R-square盡可能逼近1,如下圖所示:
9.輸出擬合參數(shù)
如果希望只顯示擬合圖像,可以點(diǎn)擊“文件”——>“Print to figure”
這樣就可以只顯示擬合圖像了,如下圖所示。
如果希望導(dǎo)出擬合后的曲線數(shù)據(jù),可以點(diǎn)擊“文件”——>“Generate Code”
生成代碼后,默認(rèn)函數(shù)名為createFit,可以自行修改,直接保存,就可以調(diào)用了。比如說,我要導(dǎo)出五次多項(xiàng)式Polynomial逼近結(jié)果,按照上述方式導(dǎo)出后,可以查看生成代碼的信息:
其中,fitresult是函數(shù)的輸出,是一個(gè)結(jié)構(gòu)體,可以用fitresult.p1得到p1的系數(shù),同理其它系數(shù)也可得。
如果想導(dǎo)出擬合后的曲線數(shù)據(jù),只需要把橫坐標(biāo)傳給fitresult就可以了:
y = fitresult(x)';
10.結(jié)論
本文主要討論了MATLAB曲線擬合工具箱(cftool)的擬合過程。通過工具箱模塊可以非常方便地對曲線進(jìn)行擬合,不需要太多的編程,曲線擬合方法多樣,效果較好。文章來源:http://www.zghlxwxcb.cn/news/detail-433154.html
ok,以上便是曲線擬合工具箱的全部內(nèi)容了,如果對你有所幫助,記得點(diǎn)個(gè)贊喲~文章來源地址http://www.zghlxwxcb.cn/news/detail-433154.html
到了這里,關(guān)于MATLAB曲線擬合工具箱(cftool)介紹(完結(jié))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!