SVDFIT Problems [message #31937] |
Fri, 30 August 2002 09:06  |
William Clodius
Messages: 30 Registered: December 1996
|
Member |
|
|
In my occaisional attempts to use SVDFIT I have had problems in that it
reports singular solutions when other fitting routines, e.g., REGRESS,
have had not problems. The obvious source of the problems is that within
the routine the line
THRESH = 1.0E-9
does not correspond to the definition in Numerical Recipes
THRESH = TOL*wmax
THRESH is used to determine the number of singular values.
The definition in Numerical Recipes has two advantages
1. TOL can be changed depending on whether the routines are single or
double precision
2. wmax provides a natural scaling for the problem.
Therefore the code has two problems
1. The determination of the number of singular values is effectively
independent of the double keyword, although that determination should
depend on the relative tolerance of the math
2. The lack of a natural scale factor means that the reporting of
singularity depends on the physical units the equations represent, e.g.,
singularity determination for an equation involving lengths, will depend
on whether the lengths are reported in bohr, angstroms, microns, meters,
kilometers etc. A properly implemented SVD rescales during its
calculations so that unless an underflow or overflow occurs in computing
the rescaling the presence of singularities is independent of the units.
The second problem can be reduced by choosing units (or a data
rescaling) so the independent variable and the values returned by
FUNCTION_NAME are typically of magnitude one, but even then the
potential remains that singular values are over or under reported.
Unfortunately it appeas that the code currently relies on a simplified
version of the Numerical Recipes routine SVDCMP, that does not return
the singular value vector that Numerical Recipes uses to compute wmax. A
rewrite to give SVDFIT the proper properties is more work than I am
willing to put in at this time.
|
|
|