【问题标题】:Additionally restricting scipy's root solverscipy root 求解器的附加限制
【发布时间】:2014-08-22 22:48:28
【问题描述】:

我正在尝试使用scipy.optimize.root() 求解非线性方程组

其中一个方程包含像x[5]**epsilon 这样的幂,其中epsilon 是一个参数。对于epsilon=1,我设法找到了根源,但对于1 周围的任何不同的epsilon,我找不到。我在这个过程中的某个地方得到了NaN,我认为它来自求解器尝试负值并为此获得NaN

有没有办法进一步限制求解器,比如告诉他x[5] >= 0 或类似的?我知道 scipy 的最小化工具可以使用这些边界,但我在 documentation 中找不到类似的东西 root

【问题讨论】:

  • 快速解决方法类似于if x[5]<0: return ones_like(x)*inf。看我的回答here

标签: python scipy equation-solving


【解决方案1】:

在您的目标函数中,将其替换为 np.exp(x[5])**epsilon,而不是 x[5]**epsilon。那么x[5] 可以是介于-inf+inf 之间的任何值,np.exp(x[5]) 将始终为正数。

远离abs(x[5]) 或可能使导数不连续的其他类似转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 2013-05-27
    • 1970-01-01
    • 2014-02-11
    • 2020-12-13
    • 1970-01-01
    • 2016-11-21
    • 2019-01-24
    相关资源
    最近更新 更多