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

    %% Fit a Simple Exponential
% Fit a simple exponential decay curve to data.
%%
% Generate data from an exponential decay model plus noise. The model is
%
% $$ y = \exp(-1.3t) + \varepsilon,$$
%
% with $t$ ranging from 0 through 3, and $\varepsilon$ normally distributed
% noise with mean 0 and standard deviation 0.05.

% Copyright 2015 The MathWorks, Inc.

rng default % for reproducibility
d = linspace(0,3);
y = exp(-1.3*d) + 0.05*randn(size(d));
%%
% The problem is: given the data (|d|, |y|), find the exponential decay
% rate that best fits the data.
%
% Create an anonymous function that takes a value of the exponential decay
% rate $r$ and returns a vector of differences from the model with that
% decay rate and the data.
fun = @(r)exp(-d*r)-y;
%%
% Find the value of the optimal decay rate. Arbitrarily choose an initial
% guess |x0| = 4.
x0 = 4;
x = lsqnonlin(fun,x0)
%%
% Plot the data and the best-fitting exponential curve.
plot(d,y,'ko',d,exp(-x*d),'b-')
legend('Data','Best fit')
xlabel('t')
ylabel('exp(-tx)')