在matlab中經常需要對資料進行曲線擬合,如最常見的多項式擬合,一般可以通過cftool呼叫曲線擬合工具(curve fit tool),通過圖形介面可以很方便的進行曲線擬合,但是有些時候也會遇到不方便用圖形工具。因此這裡簡單的記下兩種常用的擬合方法。
1 多項式擬合(polyfit和polyval)
polyfit可以對資料進行擬合(自定義用幾次多項式),返回相應的引數,然後用polyval生成擬合後的資料點,下面的例子中我們對拋物線y=3x2+6x+5進行擬合。
x = -5:0.1:5;
y = 3*x.^2+6*x + 5 + randn(size(x));
p = polyfit(x,y,2);
yy = polyval(p,x);
plot(x,y,'.');
hold on;
plot(x,yy,'r','linewidth',2)
polyfit(x,y,2)中x表示自變數,y表示因變數,2表示用二次曲線(拋物線)進行擬合,得到的p其實是對應的引數估計值,yy為擬合資料點。另外在實驗中還加了乙個隨機雜訊。
2 高斯函式的曲線擬合
高斯曲線也是很常要擬合的曲線,這裡介紹一種直接用**使用cftool擬合工具的方法,這種方法可以對許多自定義的函式進行擬合(例如用來做多項式擬合,但是這種方法要麻煩很多,遠沒有前一種方法多項式擬合方便)。下面的是乙個簡單的例子,其中還可以進行更複雜的設定,具體請help fit和fittype.
f = fittype('a*exp(-((x-b)/c)^2)');
x = -10:0.2:10;
y = 5*exp(-((x)/4).^2)+randn(size(x))*0.1;
plot(x,y,'.')
[cfun,gof] = fit(x(:),y(:),f);
yy = cfun.a*exp(-((x-cfun.b)/cfun.c).^2);
hold on;plot(x,yy,'r','linewidth',2);
此外,高斯曲線的擬合也可以通過轉化為多項式擬合的方法實現,先將被擬合資料y取對數,然後用多項式擬合求出對應的引數。**如下:
x = -10:0.2:10;
y = 5*exp(-((x)/4).^2);
lny = log(y);
p = polyfit(x,lny,2);
gauss.c = sqrt(-1/p(1));
gauss.b = -p(2)/2/p(1);
gauss.a = exp(p(3)-p(1)*gauss.b^2);
yy = gauss.a*exp(-((x-gauss.b)/gauss.c).^2);
plot(x,y,'.');
hold on;
plot(x,yy,'r','linewidth',2)
但是這種方法似乎只在沒有雜訊干擾時效果較好,如果存在雜訊的干擾的話,那麼這個估計不是最佳的(因為對數運算使不同區間的雜訊影響不同),右圖為加了雜訊之後的情況.
MATLAB 曲線擬合
x0.1 0.20.15 0.0 0.2 0.3y 0.95 0.84 0.86 1.06 1.50 0.72 函式功能多項式的擬合運算 呼叫方法polyfit x,y,n x為橫座標,y為縱座標,n為擬合階數。例子x 0 0.1 2.5 1y erf x p polyfit x,y,6 p 0.0...
matlab 曲線擬合
在matlab中經常需要對資料進行曲線擬合,如最常見的多項式擬合,一般可以通過cftool呼叫曲線擬合工具 curve fit tool 通過圖形介面可以很方便的進行曲線擬合,但是有些時候也會遇到不方便用圖形工具。因此這裡簡單的記下兩種常用的擬合方法。1 多項式擬合 polyfit和polyval ...
MATLAB 曲線擬合
clc clear i imread e rc 09 27 xuan16 30result 16 30 8 tiff figure,imshow i,hold on x 70 y 4.24e 08 x 3.589 47.51 curtptx x curtpty y 當前點的座標 x left y l...