"occasional" division by zero in optim-1.0.4/leasqr.m

Sergei Steshenko sergstesh at yahoo.com
Fri Jul 10 14:55:41 CDT 2009




--- On Fri, 7/10/09, Rob Mahurin <rob at utk.edu> wrote:

> From: Rob Mahurin <rob at utk.edu>
> Subject: Re: "occasional" division by zero in optim-1.0.4/leasqr.m
> To: "Sergei Steshenko" <sergstesh at yahoo.com>
> Cc: bug-octave at octave.org
> Date: Friday, July 10, 2009, 12:47 PM
> On Jul 10, 2009, at 2:07 PM, Sergei
> Steshenko wrote:
> > Looking into the code I found that division by zero
> occurs at lines ##
> > 301, 302 in the following piece of code:
> > [...]
> >     300 resid=y-f;   
>                
>                
> %un-weighted residuals
> >     301
> covr=resid'*Qinv*resid*Q/(m-n);       
>          %covariance of
> residuals
> >     302 Vy=1/(1-n/m)*covr;  %
> Eq. 7-13-22, Bard     
>    %covariance of the data
> >     303
> >     304
> jtgjinv=inv(jac'*Qinv*jac);       
>          
>    %argument of inv may be singular
> >     305
> covp=jtgjinv*jac'*Qinv*Vy*Qinv*jac*jtgjinv; % Eq. 7-5-13,
> Bard %cov of parm est
> > 
> > I have verified that division by zero occurs because n
> == m; in my case
> > they both were 10, but they can be anything, of
> course.
> > 
> > Earlier in the code m, n are set this way (line #161)
> > 
> >     159 y=y(:); wt=wt(:);
> pin=pin(:); dp=dp(:); %change all vectors to columns
> >     160 % check data vectors- same
> length?
> >     161 m=length(y);
> n=length(pin); p=pin;[m1,m2]=size(x);
> >     162 if m1~=m
> ,error('input(x)/output(y) data must have same number of
> rows ') ,end;
> > .
> > 
> > In English 'm' is number of elements in 'y' vector
> which is the vector
> > of observed function values, and 'n' is number of
> elements in parameters
> > ('p') which are supposed to be approximated by
> 'leasqr'.
> > 
> > Though I know nothing about covariance matrix (the
> piece of code where
> > division by zero occurs) and a little about
> Levenberg-Marquardt algorithm
> > implemented by 'leasqr', I do not think there should
> be a hard requirement
> > for number of elements in 'y' and 'p' to be
> different.
> 
> If there are as many observations as parameters, it's
> possible in principle to find a set of parameters so that
> all the residuals are zero.  You must have more
> observations than parameters to get error estimates on the
> parameters, which is where all the covariance matrices come
> in.
> 
> What does leasqr do if you feed it, say, three observations
> and four parameters?  I think in that case it should
> just fail ("underdetermined problem" or something).  I
> don't know whether the should try to fit for the case m==n
> or not.
> 
> Cheers,
> Rob
> 
> --Rob Mahurin
> University of Manitoba, Dept. of Physics & Astronomy
> at:    Oak Ridge National
> Laboratory    865 207 2594
>     Oak Ridge, Tennessee   
>     rob at utk.edu


I think the algorithm should try to fit - n == m is "exactly" determined
problem.

I think that the algorithm should try to fit in any case - because it fits
in the least squares sense.

The code which causes division by zero is _after_ the fitting part, i.e.
it is not necessary for the algorithm to work. In my calculations I simply
ignore results produced by the sometimes failing piece of code - not 
because it sometimes fails, but because I simply do no need them.

Thanks,
  Sergei.


      



More information about the Bug-octave mailing list