Matlab指定函數(shù)曲線擬合教程
在學(xué)習(xí)的過程中,我們經(jīng)常需要對一些離散數(shù)據(jù)進行指定函數(shù)的曲線擬合,來驗證一些理論推理。下面我將為大家示范如何使用Matlab進行指定函數(shù)的曲線擬合。準備數(shù)據(jù)我們通過阻尼振蕩實驗中測得離散數(shù)據(jù)來進行示范
在學(xué)習(xí)的過程中,我們經(jīng)常需要對一些離散數(shù)據(jù)進行指定函數(shù)的曲線擬合,來驗證一些理論推理。下面我將為大家示范如何使用Matlab進行指定函數(shù)的曲線擬合。
準備數(shù)據(jù)
我們通過阻尼振蕩實驗中測得離散數(shù)據(jù)來進行示范,數(shù)據(jù)如下:
x [0 0.4 1.2 2 2.8 3.6 4.4 5.2 6 7.2 8 9.2 10.4 11.6 12.4 13.6 14.4 15];
y [1 0.85 0.29 -0.27 -0.53 -0.4 -0.12 0.17 0.28 0.15 -0.03 -0.15 -0.071 0.059 0.08 0.032 -0.015 -0.02];
我們先通過散點圖來觀察其大致規(guī)律。
選擇擬合函數(shù)模型
由上面的散點圖可知,其對應(yīng)的函數(shù)形式為指數(shù)衰減的余弦函數(shù),即a*cos(k*t)*exp(w*t)。
使用Matlab進行曲線擬合
接下來我們采用這個函數(shù)模型對上面的離散數(shù)據(jù)進行曲線擬合,代碼如下:
syms tf fittype('a*cos(k*t)*exp(w*t)', 'independent', 't', 'coefficients', {'a', 'k', 'w'});
cfun fit(x, y, tf);
% 顯示擬合函數(shù),數(shù)據(jù)必須為列向量形式
xi 0:0.1:20;
yi cfun(xi);
figure
plot(x, y, 'r*');
hold on
plot(xi, yi, 'b-');
title('擬合函數(shù)圖形');
figure
plot(x, sqrt((y-yi(1:1:18,:)).^2/18), 'r*');
title('標準誤差圖');
由上面的擬合函數(shù)圖形和標準誤差圖形可知,擬合函數(shù)給出了數(shù)據(jù)的大致趨勢,結(jié)果很好。下面再給出幾個參數(shù)值與對應(yīng)參數(shù)的置信區(qū)間。
代碼解釋
細心的網(wǎng)友可能看到命令窗口中給出的Warning,其實,因為我們?nèi)齻€參數(shù)a,k,w三個參數(shù)的初始值未給出導(dǎo)致,因此如果擬合結(jié)果不是十分理想,可以多運行幾次。
最后,我們對上述Matlab代碼所出現(xiàn)的一些函數(shù)進行大致介紹,如果想要詳細介紹請參考Matlab說明文檔。
- fittype(): 自定義擬合函數(shù),在使用時直接模仿下面的參數(shù)填寫即可
- fit(): 根據(jù)自定義的擬合函數(shù)來擬合數(shù)據(jù)x,y,注意數(shù)據(jù)必須為列向量形式
總結(jié)
通過上面的Matlab代碼,我們成功地對離散數(shù)據(jù)進行了指定函數(shù)的曲線擬合,得到了較為理想的擬合結(jié)果。希望對大家學(xué)習(xí)Matlab曲線擬合有所幫助。