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\geq0$, 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.

  • $\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
    Commented Sep 20, 2019 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
    Commented Sep 20, 2019 at 9:30
  • $\begingroup$ Can you provide an example where Newton's method is evaluating your function outside of the domain? $\endgroup$
    – nicoguaro
    Commented Sep 21, 2019 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
    Commented Sep 25, 2019 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
    Commented Sep 25, 2019 at 12:10

1 Answer 1


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.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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