非線性曲線擬合是已知輸入向量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^2+x(2)*sin(xdata)+x(3)*xdata^3
即表示式的引數為[x(1),x(2),x(3)]。
目標函式為: minς( f(x,xdata) - ydata )^2
其中:f(x,xdata) = x(1)*xdata^2 + x(2)*sin(xdata) + x(3)*xdata^3
初始解向量為x0=[0.3, 0.4, 0.1]。
解:先建立擬合函式檔案,並儲存為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解值處的目標最小二乘表示式值。即所謂殘差。
Matlab中的括號()
matlab中經常會用到括號去引用某array或者是cel l的內容,但三者有什麼具體區別呢?中括號用來構建向量 vectors 或者是矩陣 matrices 如 6.9 9.64 sqrt 1 就是乙個有三個元素的向量。11 12 13 21 22 23 是乙個二乘三的矩陣.分號 用來結束一行。中...
Matlab中的括號()
標籤 matlab 括號 cell array 分類 matlab matlab中經常會用到括號去引用某array或者是cell的內容,但三者有什麼具體區別呢?中括號用來構建向量 vectors 或者是矩陣 matrices 如 6.9 9.64 sqrt 1 就是乙個有三個元素的向量。11 12 ...
Matlab中的括號()
matlab中經常會用到括號去引用某array或者是cell的內容,但三者有什麼具體區別呢?中括號用來構建向量 vectors 或者是矩陣 matrices 如 6.9 9.64 sqrt 1 就是乙個有三個元素的向量。11 12 13 21 22 23 是乙個二乘三的矩陣.分號 用來結束一行。中括...