额外限制scipy的根求解器
我正在尝试用 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])
或其他类似的变换,因为这些可能会导致导数不连续。