1
$\begingroup$

When I use the newton's method or hybrid solver in the GSL package to deal with 1-D or multidimensional root solving problems, the code frequently crashes when the solver requests function value outside its domain of definition. For example, to solve $f(x)=0$ where $f(x)$ is only defined at $x\leq0$, even when I start with an initial guess very close to the root, the solver may still ask to evaluate the $f(x)$ at a negative $x$. Bisection method may be helpful in the 1-D problem, but it won't work for a multidimensional problem.

I typically try to solve the problem by arbitrarily define the $f(x)$ in the whole domain. But in some situation, especially in the case of complicated multidimensional root solving, I feel it's hard to extend the domain of the function and make sure it roughly maintain the general trend of the original function.

So I'm wondering if there is a method to restrict the region that solver would evaluate the function.

$\endgroup$
  • $\begingroup$ Possibly related question. Can you take a look at the tricks described there and evaluate them for the root-finding usage? $\endgroup$ – Anton Menshov Sep 20 '19 at 9:00
  • $\begingroup$ @AntonMenshov Do you suggest defining the function to NaN outside the domain? I believe the root solver will stop when the function doesn't return a real number. Or do you suggest to construct a fake function outside the domain? If so, do you have any trick on how to construct such a function? $\endgroup$ – HD189733b Sep 20 '19 at 9:30
  • $\begingroup$ Can you provide an example where Newton's method is evaluating your function outside of the domain? $\endgroup$ – nicoguaro Sep 21 '19 at 14:00
  • $\begingroup$ @nicoguaro I think I figured out the reason. I tried to reproduce my problem with a simple function, but I failed. My multidimensional function has some discontinuity in one dimension. The problem happens when the solution is very close to a discontinuity point. I temporarily solve the problem by checking the location of the discontinuity point before the root solving. If it is too close to the potential solution, I modify the function to avoid that. $\endgroup$ – HD189733b Sep 25 '19 at 5:45
  • $\begingroup$ Newton method works for continuous functions, so I would say that what you mention makes sense. If you provide your function (or simplified one that reproduces the problem) you could write an answer on how you solved it. $\endgroup$ – nicoguaro Sep 25 '19 at 12:10
0
$\begingroup$

Although I do not know about the GSL package, I can give some tips for root-finding concerning domain issues.

In the 1-D case, you can guarantee convergence with a bracketing method such as Newt-safe or bisection as you've suggested. This requires a bracketing interval given by two points where the function changes signs.

In the general case, I recommend decreasing the step size of the iteration (e.g. by halving) until you reenter the domain of your function. This should hopefully prove to be more reliable.

| cite | improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.