如何避免gsl root finder评估其域之外的功能

计算科学 牛顿法 寻根 gsl
2021-12-16 06:31:42

当我使用 GSL 包中的牛顿法混合求解器来处理一维或多维根求解问题时,当求解器请求其定义域之外的函数值时,代码经常崩溃。例如,要解决f(x)=0在哪里f(x)仅定义在x0,即使我从非常接近根的初始猜测开始,求解器仍可能要求评估f(x)在否定x. 二分法可能有助于解决一维问题,但不适用于多维问题。

我通常尝试通过任意定义f(x)在整个域中。但是在某些情况下,特别是在复杂的多维根求解的情况下,我觉得很难扩展函数的域,并确保它大致保持原函数的总体趋势。

所以我想知道是否有一种方法可以限制求解器评估函数的区域。

1个回答

虽然我不知道 GSL 包,但我可以提供一些有关域问题的根查找的提示。

在 1-D 情况下,您可以按照您的建议使用包围方法(例如Newt-safe或二分法)保证收敛。这需要一个由函数改变符号的两点给出的包围区间。

在一般情况下,我建议减少迭代的步长(例如减半),直到您重新进入函数的域。这应该有望证明是更可靠的。