On Mar 18, 2011, at 7:39 PM, Artyom Kazak wrote:
Hi Café!
roots (http://hackage.haskell.org/package/roots) is a package to
solve equations like "f(x)==0".
In RootFinder class there is an 'defaultNSteps' value, which is used
as maximal count of iterations functions like findRoot and traceRoot
can make. By default it is 250, but sometimes it's not enough. How
can I use another value instead of 250? Should I write my own
RootFinder instance, or findRoot function?
Those are both options, as is to simply restart findRoot if it
returns a 'Left' vaule. I personally would incline toward a custom
driver function (findRoot). I should probably add one to the library
that accepts a step limit and/or one that just iterates until
convergence.
I'm curious, though - what sort of functions are you using, and what
root finding algorithm, that it takes that long to converge? And are
you sure that it ever does, if it were allowed to run longer?
Typically, for functions on Double, if an algorithm fails to converge
within around 50 steps it's fairly likely that it never will -
especially with an algorithm like bisection or Brent's method. If
you're using a higher precision type, then I probably need to change
the default iteration limit to something more suited to the function
type.
-- James
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe