Matlab 曲線擬合

2021-09-02 10:57:21 字數 1484 閱讀 4977

在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...