當前位置:編程學習大全網 - 編程語言 - Matlab lsqcurvefit的詳細用法

Matlab lsqcurvefit的詳細用法

非線性曲線擬合是已知輸入向量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解值處的目標最小二乘表達式值。即所謂殘差。

  • 上一篇:兩只小兔子的幼兒故事
  • 下一篇:微信小程序如何制作開發?
  • copyright 2024編程學習大全網