额外限制scipy的根求解器

1 投票
1 回答
664 浏览
提问于 2025-04-18 18:04

我正在尝试用 scipy.optimize.root() 来解决一组非线性方程。

其中一个方程有一个幂的形式,比如 x[5]**epsilon,这里的 epsilon 是一个参数。当 epsilon=1 时,我能找到方程的解,但当 epsilon 取其他接近 1 的值时,我就找不到了解。我在过程中遇到了 NaN,我猜这可能是因为求解器在尝试负值时导致的 NaN

有没有办法进一步限制求解器,比如告诉它 x[5] >= 0 或类似的条件?我知道 scipy 的最小化工具可以使用这些边界,但我在 文档 中找不到关于 root 的相关信息。

1 个回答

1

不要用 x[5]**epsilon,而是把它换成 np.exp(x[5])**epsilon 在你的目标函数里。这样的话,x[5] 可以是任何值,从 -inf+inf,而 np.exp(x[5]) 总是会是正数。

尽量避免使用 abs(x[5]) 或其他类似的变换,因为这些可能会导致导数不连续。

撰写回答