Exponential fitting with lsquares




On Sat, 23 May 2009, Jose A. Vallejo wrote:

< I'm trying to make a script for a calculus class. I want to
< introduce exponential fittings, and I use the example of USA
< population growth, defining:

< y=2*10^(-9)*exp(0.01*x), this is the reason for the initial
< guess):
< 
< >> mse:lsquares_mse(M,[x,y],y=a*exp(b*x));
< >> lsquares_estimates_approximate(mse,[a,b],initial=[0.0001,1],iprint=[-1,
< >> 0]);
 
There appears to be a few problems here. Try rebasing your year in mse,
and try using lbfgs directly to compute the lsq estimate:

mse:lsquares_mse(M,[x,y],y=a*exp(b*(x-1900)));
lbfgs(mse,'[a,b],[100,0.01],1e-4,[1,0]);

*************************************************
 THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
 IFLAG = 0
(%o18)          [a = 82.41283534143082, b = 0.012431840496229]

------------------------------------------------------------
The problem appears to be that lsquares_estimates_approximate ignores
the initial value passed to it:

lsquares_estimates_approximate(mse,'[a,b],initial=[82,0.01],iprint=[1,3]);
*************************************************
VECTOR X=
   1.000000000000000D+00   1.000000000000000D+00
 GRADIENT VECTOR G=
   1.313813415094471D+86   1.313813414823674D+88

If you redefine mse so that [1,1] is a reasonable initial value, you
will get an estimate:

mse:subst([a=82*a,b=0.01*b],mse)$
lsquares_estimates_approximate(mse,'[a,b],iprint=[1,3]);

THE MINIMIZATION TERMINATED WITHOUT DETECTING ERRORS.
 IFLAG = 0
         [[a = 1.005034579667296, b = 1.243184045872825]]

Leo



(%i35) build_info();

Maxima version: 5.18.1
Maxima build date: 13:24 4/26/2009
host type: i686-pc-linux-gnu
lisp-implementation-type: GNU Common Lisp (GCL)
lisp-implementation-version: GCL 2.6.8


-- 
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.