【问题标题】:Solving a nonlinear equation numerically for all multiple solutions为所有多重解数值求解非线性方程
【发布时间】:2021-11-10 14:45:39
【问题描述】:

我有一个非线性方程:我在下图中绘制了这个方程的左侧和右侧。显然有两种解决方案。我已经尝试过 scipy.optimize.fsolve 并战略性地猜测起点以找到这两个解决方案,但这非常不可靠。是否有一个 Python 求解器可以找到这个方程的所有解,例如在某个有限的 x 值集合内?

Function with multiple solutions

【问题讨论】:

  • @nutix 你能把方程式贴出来吗?
  • 在更高维度,我们可以使用全局求解器。添加约束||x-sol||>=tol 以找到新的解决方案。 (警告:这个约束是非凸的)。全局求解器 Baron 包含一个选项 NumSols,因此您可以知道它应该寻找多少个解决方案,

标签: python optimization solver scipy-optimize


【解决方案1】:

求解器不知道有多少解决方案,也不知道它们可能出现在哪里,因此您需要搜索解决方案。一种方法是:

  • 求解模型以找到解决方案。假设它发生在 x = 88.7。
  • 添加一个以极少数量排除该解决方案的约束。例如x
  • 再次求解。求解器要么找到另一个解决方案,要么说没有任何可行的解决方案。
  • 因为我们不知道求解器第一次会找到哪个解,所以我们还需要检查另一个方向。例如x >= 88.7 + 0.00001
  • 如果可能有两个以上的解决方案,您需要重复此过程,逐步细分解决方案空间,直到没有更多解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 2018-07-18
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多