1 基於最小二乘法的多項式擬合函數:polyfit
p = polyfit(x,y,n),待擬合的多項式為p(1)*x^n + p(2)*x^(n-1) +…+ p(n)*x + p(n+1),其中x是擬合數據的自變量,y是因變量,n是擬合多項式的階數,如當n為1時,即為一次線性擬合。
例1
x = -10:0.2:10;
y = 1.25*x.^2 + 0.38*x+2;
len = length(x);
yy = y + 2*(rand(1,len)-0.5);
plot(x,yy,'.')
% 擬合得到係數
p = polyfit(x,yy,2);
% 求出擬合值
yfit = p(1)*x.^2 + p(2)*x+p(3);
hold on
plot(x,yfit,'r');
hold off
legend('原始數據','擬合值');
2 多項式擬合求值函數:polyval
y = polyval(p,x),p為採用polyfit求出的擬合係數,x為自變值,可以為單個值也可以為數組。使用該函數可以省去例1中列出表達式原型。
例2
x = -10:0.2:10;
y = 1.25*x.^2 + 0.38*x+2;
len = length(x);
yy = y + 2*(rand(1,len)-0.5);
plot(x,yy,'.')
% 擬合得到係數
p = polyfit(x,yy,2);
% 求出擬合值
yfit = polyval(p,x);
hold on
plot(x,yfit,'r');
hold off
legend('原始數據','擬合值');
3 自定義類型擬合函數:fittype
使用fittype函數可以自定義擬合函數,可以滿足線性擬合和非線性擬合。調用格式如下:
aFittype = fittype(libraryModelName),其中,libraryModelName為內置庫模型名稱,如:
aFittype = fittype(expression),其中,expression為自定表達式,這也是最常用到的,如:
例3
x = -10:0.2:10;
y = 1.25*x.^3 + 0.38*x.^2 + 2*x + 4;
len = length(x);
yy = y + 30*(rand(1,len)-0.5);
plot(x,yy,'.')
% 定義三次曲線擬合
p = fittype('poly3');
% 獲取擬合函數
yfit = fit(x',yy',p);
hold on
% 計算並繪圖
plot(x,yfit(x),'r');
hold off
legend('原始數據','擬合值');