
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