www.gusucode.com > optim 案例源码 matlab代码程序 > optim/ExamineTheNonlinearLeastSquaresSolutionProcessExample.m

    %% Examine the Solution Process
% Examine the solution process both as it occurs (by setting the |Display| option
% to |'iter'|) and afterwards (by examining the |output| structure).
%%
% Suppose that you have observation time data |xdata| and observed response
% data |ydata|, and you want to find parameters $x(1)$ and $x(2)$ to  fit a
% model of the form
%
% $$ \hbox{ydata} = x(1)\exp\left(x(2)\hbox{xdata}\right).$$
%%
% Input the observation times and responses.

% Copyright 2015 The MathWorks, Inc.

xdata = ...
 [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
ydata = ...
 [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];
%%
% Create a simple exponential decay model. The model computes a vector of
% differences between predicted values and observed values.
fun = @(x)x(1)*exp(x(2)*xdata)-ydata;
%%
% Fit the model using the starting point |x0 = [100,-1]|. Examine the
% solution process by setting the |Display| option to |'iter'|. Obtain an
% |output| structure to obtain more information about the solution process.
x0 = [100,-1];
options = optimoptions('lsqnonlin','Display','iter');
[x,resnorm,residual,exitflag,output] = lsqnonlin(fun,x0,[],[],options);
%%
% Examine the output structure to obtain more information about the
% solution process.
output
%%
% For comparison, set the |Algorithm| option to |'levenberg-marquardt'|.
options.Algorithm = 'levenberg-marquardt';
[x,resnorm,residual,exitflag,output] = lsqnonlin(fun,x0,[],[],options);
%%
% The |'levenberg-marquardt'| converged with fewer iterations, but almost
% as many function evaluations:
output