matlab中lsqcurvefit怎麼用

2021-04-01 04:36:29 字數 4366 閱讀 7849

1樓:匿名使用者

求解曲線擬合問題的一般過程是,先通過觀察曲線形狀大致確定函式的形式,然後對函式的引數有個大概的估計作為初值,擬合後畫出曲線來看看效果,如果效果不理想,就考慮修改初值或函式的形式再試。有時候需要經過多次嘗試才能得到滿意的結果。

需要特別注意以下兩點:

1、與擬合函式的形式有關,如果函式形式選擇不當,不可能得到理想的結果。

例如,對於反比例函式,比較一般的情況應該考慮取1/(c1*x+c2)+c3。

2、擬合問題與初值關係很大,不是隨便指定什麼初值都行的通的。

例如,對於本題,初值如果選擇[0.5 -0.1 1],得到的結果就不太理想;但取[1 1 1]得到的結果就比較滿意。

**及擬合結果如下:

x=1:5;

y=[1 0.83 0.75 0.71 0.68];

f=@(c,x)1./(c(1)*x+c(2))+c(3);

c0=[1 1 1];

[c,resnorm]=lsqcurvefit(f,c0,x,y);

plot(x,y,'.-',x,f(c,x),'r:x')

legend('原始資料','擬合資料')

2樓:shine戚七七

採用matlab的lsqcurvefit函式進行非線性擬合:

1、首先編寫fun.m檔案

function [ f ] = fun( c,x )

%untitled3 summary of this function goes here

% detailed explanation goes here

f=1-8/9.8696.*exp(-9.8696.*c(1).*x/(c(2).^2));

end2、然後編寫data.m進行擬合

clc;clear;

data=[0 0

1 27.33333333

2 37.46666667

3 48.5

4 57.6

5 66.53333333

6 74.43333333

8 85.33333333

10 91.1

12 95.5

14 96.53333333

17 97.3

20 97.93333333

24 98.33333333];

xdata=data(:,1);

ydata=data(:,2)./100;

c0=[1 1];

for i=1:100

c = lsqcurvefit ('fun', c0, xdata, ydata) ;

c0 = c; %以計算出的 c為初值進行迭代;

endc

x=0:0.5:25;

y1=1-8/9.8696.*exp(-9.8696.*c(1).*x/(c(2).^2));

plot(xdata, ydata,'o',x,y1,'r');

legend ('實驗資料 ','擬合曲線');

3、擬合結果

d= 0.0241 l=1.1436

3樓:白肚河蟹不讓說

非線性曲線擬合是已知輸入向量xdata和輸出向量ydata,並且知道輸入與輸出的函式關係為ydata=f(x, xdata),但不知道係數向量x。今進行曲線擬合,求x使得輸出的如下最小二乘表示式成立:

min σ(f(x,xdatai)-ydatai)^2

函式 lsqcurvefit

格式 x = lsqcurvefit(fun,x0,xdata,ydata)

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

[x,resnorm] = lsqcurvefit(…)

[x,resnorm,residual] = lsqcurvefit(…)

[x,resnorm,residual,exitflag] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)

[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(…)

引數說明:

x0為初始解向量;xdata,ydata為滿足關係ydata=f(x, xdata)的資料;

lb、ub為解向量的下界和上界lb≤x≤ub,若沒有指定界,則lb=[ ],ub=[ ];

options為指定的優化引數;

fun為待擬合函式,計算x處擬合函式值,其定義為 function f = myfun(x,xdata)

resnorm=sum ((fun(x,xdata)-ydata).^2),即在x處殘差的平方和;

residual=fun(x,xdata)-ydata,即在x處的殘差;

exitflag為終止迭代的條件;

output為輸出的優化資訊;

lambda為解x處的lagrange乘子;

jacobian為解x處擬合函式fun的jacobian矩陣。

例 求解如下最小二乘非線性擬合問題

已知輸入向量xdata和輸出向量ydata,且長度都是n,待擬合函式的表示式為

ydata(i)=x(1)-xdata(i)^2+x(2)-sin(xdata(i))+x(3)-xdata^3

即目標函式為min σ(f(x,xdata(i))-ydata(i))^2

其中:f(x,xdata) = x(1)*xdata^2 + x(2)*sin(xdata) + x(3)*xdata^3

初始解向量為x0=[0.3, 0.4, 0.1],即表示式的 個引數[x(1),x(2),x(3)]。

解:先建立擬合函式檔案,並儲存為myfun.m

function f = myfun(x,xdata)

f = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;

然後給出資料xdata和ydata

>>xdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];

>>ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];

>>x0 = [10, 10, 10]; %初始估計值

>>[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata)

結果為:

optimization terminated successfully:

relative function value changing by less than options.tolfun

x = 0.2269 0.3385 0.3021

=>即解出的係數最優估計值

resnorm = 6.2950

=>在x解值處的目標最小二乘表示式值。即所謂殘差。

4樓:匿名使用者

1、與擬合函式的形式有關,如果函式形式選擇不當,不可能得到理想的結果。例如,對於反比例函式,比較一般的情況應該考慮取1/(c1*x+c2)+c3。

2、擬合問題與初值關係很大,不是隨便指定什麼初值都行的通的。例如,對於本題,初值如果選擇[0.5 -0.1 1],得到的結果就不太理想;但取[1 1 1]得到的結果就比較滿意。

5樓:

首先 看你的資訊說明優化過程並沒有完全失敗 但是你可以用擬合出來的結果自己畫圖看一看,有可能效果不佳。

解決方案:1 調整你的初值 2 擬合方程分母是線性函式,建議把y取倒數後做線性擬合,這樣很容易得到比較精確的結果。

6樓:我行我素

要學習這個函式的用法,可在命令窗中輸入help lsqcurvefit檢視、學習。如有應用問題,可說明是啥問題,便於解答。

7樓:

這句話只是matlab告訴你程式終止的原因,並不

是什麼錯誤。你可以輸入c和resnorm看看,應該有結果的。但是,matlab並不能保證擬合結果一定就符合你的要求,所以你要將c的值代回擬合函式,plot出擬合曲線,看看擬合的效果如何。

8樓:手機使用者

lsqcurvefit(....),具體函式說明見matlab help

lsqcurvefit = least square curve fit(最小二乘曲線擬合),當然你要先確定曲線的形式,函式可以幫你求出待定引數

matlab中自相關函式,matlab中自相關函式xcorr

自相關函式是描述隨機訊號x t 在任意兩個不同時刻t1,t2的取值之間的相關程度.設原函式是f t 則自相關函式定義為r u f t f t 其中 表示卷積.給個例子 dt 1 t 0 dt 100 x cos t a,b xcorr x,unbiased plot b dt,a 上面 是求自相關函...

matlab中1什麼意思,matlab中a,13是什麼意思

1,表示 矩陣的第一行。2,表示 矩陣的第二行。依次類推 x,表示 矩陣的第x行。而 y 表示 矩陣的第y列。1 6 其中1 6是由123456六個數 組成的行向量,單引號轉置 所以是由123456六個數 組成的列向量,或者說乙個6 1矩陣 就是說取第一行的所有列 取乙個矩陣中第一行所有資料 表示x...

matlab中edge的用法,matlab中的edge函式入口引數如何設定?

bw edge i 採用灰度或一個二值化影象i作為它的輸入,並返回一個與i相同大小的二值化影象bw,在函式檢測到邊緣的地方為1,其他地方為0。bw edge i,sobel 自動選擇閾值用sobel運算元進行邊緣檢測。bw edge i,sobel thresh 根據所指定的敏感度閾值thresh,...