[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-gsl] Non-linear Multi-parameter Least-Squares Example
From: |
Gordan Bobic |
Subject: |
Re: [Help-gsl] Non-linear Multi-parameter Least-Squares Example |
Date: |
Fri, 20 Jul 2007 09:30:14 +0100 (BST) |
On Fri, 20 Jul 2007, John Gehman wrote:
> In using integers from 0 to 40 for your xdata, and computing data
> with (b/c) as part of your function, you're introducing an undefined
> number into the whole process. Hence the residual will be undefined,
> and the sum of the squares of the residuals will be undefined, and
> the gradients at that point, etc etc. At a minimum try float f = i
> +1.0 where the data is built, and in the _f and _df functions.
Yeah, somebody else pointed it out to me yesterday. I can't believe I
didn't spot that. What a schoolboy error. Worse, I only re-wrote it in the
period/t instead of frequency format because I was finding it easier to
read while I was getting it to work.
I now changed it using the frequency, so it both runs faster (due to
multiply being roughly 4 clock cycles instead of about 80 for a divide)
and avoids the div/0 problems. :-)
> That's surely the biggest problem. But you also might want to be
> careful about mixing your float data types with the doubles assumed
> by gsl structures. I didn't look closely, but was left with the
> impression that they were mixed a bit in your code. You might be
> getting away with it anyway, but just a word of caution.
The only thing that seems to require doubles is the x_init array.
Everything else seems to work OK with floats. My main motivations for
using floats are:
1) Smaller - more data fits in the cache
2) Faster
2.1) SSE1 cannot vectorize doubles
2.2) SSE2+ can vectorize doubles but only 2 at a time instead of 4 at a
time.
> Also, with regard to the ultimate intent of fitting the data, I
> presume this was just an incremental step in your development of the
> fitting procedure, but insofar as this goes, once you clean up the
> above, you'll still get a shite fit, as the harmonic function, is not
> described well by the data sampling.
Indeed I am aware of this, but it depends on the data, and it depends on
the initial guesstimate. I have a reasonably good guesstimator
implemented, and I am finding that typically the error between the fit and
the data falls to within 5-10% in most cases. But this may just mean that
my data is quite clean (which, arguably, I expected). But you do have a
point - my worst case data may well be much more noisy.
Which brings me to the next question. I have my own home-brewed solver
implemented and that works by steepest descent annealing (i.e. when it
finds a local minimum it ups the resolution). I'm finding that overall it
fits better solutions - possibly because noise in the data somtimes upsets
the algebraic gradient descent and it gets stuck in a local minimum, and
the local-inspection approach with increasing precision may be more
robust. The GSL implementation also seems slower on my current platform,
despite generally managing to descend in considerably fewer iterations (up
to the point where it stops being able to fit a better solution - but it
stops earlier than my own algorithm).
Now, granted, the speed could be an implementation issue (my code was made
with ICC's auto-vectorization in mind), but are there parameters on the
solver function that could be tweaked, other than the delta checker
sensitivity?
Also, how does sigma fit into all this? I have tried it with various
settings and it didn't seem to make any difference, so I just set it to 1
and removed it from all the equations to save the seemingly needless
divide.
Finally - where is gsl_matrix_float_set() implemented? grep only seems to
find it in the header files. I wanted to have a closer look at the code to
see if I could do anything to help it vectorize with ICC (assuming it
doesn't already).
Thank you all for helping, I really appreciate it.
Gordan
- Fwd: [Help-gsl] Non-linear Multi-parameter Least-Squares Example, John Gehman, 2007/07/19
- Re: [Help-gsl] Non-linear Multi-parameter Least-Squares Example, Gordan Bobic, 2007/07/19
- Re: [Help-gsl] Non-linear Multi-parameter Least-Squares Example, John Gehman, 2007/07/19
- Re: [Help-gsl] Non-linear Multi-parameter Least-Squares Example,
Gordan Bobic <=
- Re: [Help-gsl] Non-linear Multi-parameter Least-Squares Example, John Gehman, 2007/07/20
- Re: [Help-gsl] Non-linear Multi-parameter Least-Squares Example, Gordan Bobic, 2007/07/20
- [Help-gsl] gsl_matrix_set(), Gordan Bobic, 2007/07/20
- Re: [Help-gsl] gsl_matrix_set(), Jordi GutiĆ©rrez Hermoso, 2007/07/20
- Re: [Help-gsl] gsl_matrix_set(), Gordan Bobic, 2007/07/20
- Re: [Help-gsl] gsl_matrix_set(), Martin Jansche, 2007/07/22
- Re: [Help-gsl] gsl_matrix_set(), Jordi GutiĆ©rrez Hermoso, 2007/07/20