Exponential fitting with lsquares



On 5/23/09, Jose A. Vallejo <jose.a.vallejo at prodigy.net.mx> wrote:

>>> lsquares_estimates_approximate(mse,[a,b],initial=[0.0001,1],iprint=[-1,

The argument initial=... is ignored --- that's a bug.
I fixed it and I'll commit it soon.

> Maxima encountered a Lisp error:
>
> NTH: T is not a list

This is a failure (on Maxima's part) in the handling of
floating point overflow. lbfgs constructs a Lisp function to
compute numerical values. That function is apparently
doing something unhelpful here. Can you make a bug report
about this?

FWIW I find the following formulation seems to yield a
sensible result with Maxima built from CVS (didn't try it
on any released version).

M : matrix
([1900, 75.995],
 [1910, 91.972],
 [1920, 105.711],
 [1930, 123.203],
 [1940, 131.669],
 [1950, 150.697],
 [1960, 179.323],
 [1970, 203.212],
 [1980, 226.505],
 [1990, 249.633],
 [2000, 281.422]) $

load (lsquares) $

mse : lsquares_mse (M, [x, y], y = a * exp(b*(x - 1950)));

est : lsquares_estimates_approximate (mse, [a, b], initial=[100, 0.01]);

plot2d ([a * exp(b*(x - 1950)), [discrete, args (M)]], [x, 1900, 2010]), est;

lsquares_residuals (M, [x, y], y = a * exp(b*(x - 1950)), first (est));

best

Robert Dodier