【问题标题】:Scipy - All the Solutions of Non-linear Equations SystemScipy - 非线性方程组的所有解
【发布时间】:2015-09-01 20:35:24
【问题描述】:

我有一个非线性方程组,其中可以选择任意n,所以向量长度x = (x1,...,xn)可以与众不同。例如,系统可以是这样的:

    f1(x1,...,xn) = sum( xi + xi^2 ) = 0, i={1,n}
    f2(x1,...,xn) = sum( e^xi + xi + sin(xi*pi) ) = 0, i={1,n}

根据this example,我使用 scipy 库的 fsolve() 来求解这样的 NLE,但对于 *x = x0 的每个初始近似,它只返回一个解。但是由于n可以很大(例如n = 100),而且可以有很多解,所以做初始条件不是很有用 x = x0 用于找到每个解决方案。

那么,请给我一个例子,在这种情况下如何通过 fsolve() 找到 所有 解决方案?还是用其他简单的方法?

附加 例如,我有以下简单的系统:

def equations(p):
    x, y = p
    return (x**2-1, x**3-1)

对于不同的初始条件,我有不同的解决方案: x, y = fsolve(方程, (0, 0)) (0.0, 0.0)

x, y =  fsolve(equations, (1, 1))
(1.0, 1.0)

x, y =  fsolve(equations, (-1, 1))
(-0.47029706057873205, 0.41417128904566508)

是否可以使用任何 Scipy 函数(如 fsolve())来查找所有解决方案(根),例如: x, y = some_scipy_solver(方程, (x0, y0)) 1. (1.0, 1.0) 2. (0.0, 0.0) 3. (-0.47029706057873205, 0.41417128904566508) ...

其中 (x0, y0) = 任何初始近似值:(0, 0),(1, 1),(-1, 1),(0.1, 10.0) 等,我只确定 x0 的约束, y0, 像这样:-1.0

【问题讨论】:

  • P.S.我已经实现了我需要的功能系统,例如 ,以及使用 fsolve(sys1, x0) 解决这些系统的模块。因此,如果您也给我举一个 fsolve() 或方法的例子,这将非常有帮助,它可以简单地替换 fsolve((f1, f2), x0) 或 fsolve([f1, f2], x0)。

标签: python numpy scipy equation-solving nonlinear-functions


【解决方案1】:

即使对于单个非线性方程,也很难(或不可能)从数值上找到所有解,更不用说系统了。例如,考虑方程,

sin(1/x) = 0

在区间 [0, 1] 内有无穷多个解:你无法用典型的求根算法解决这个问题。

特别是,scipy.optimize.fsolve 使用局部优化方法来找到给定方程的一个解。从概念上讲,您不能使用它(或 scipy 模块中的任何其他东西,真的)来找到所有可能的解决方案。当然,如果您知道系统有给定数量的解决方案,您可以将初始条件随机设置为fsolve(就像您所做的那样),直到找到所有解决方案。但是没有通用的方法可以解决这个问题。

相反,如果足够简单,您可能会更幸运地使用 sympy 解析解决您的系统。

【讨论】:

  • 我已经听说过 sympy 并且我尝试过 sympy.nsolve,它的工作方式与 scipy 中的 fsolve 相同。所以现在我应该尝试使用 sympy.solve,谢谢您的建议!据我了解, sympy.solve 不给出数值解(仅作为根的分析函数),是吗?
  • 是的,你是对的。 sympy.solve 返回分析根,应该给你所有的解决方案。
  • 不幸的是,分析根为 x1 = f(x2) 不支持我的需求。我只需要数值解 - 我想要得到的最终结果应该是 f1(x1,...,xn) = F(f2(x1,...,xn ))。所以,我只想得到一组点 (x1,...,xn)[1], ..., (x1,...,xn)[m],数值求解,并绘制点集 (f1(x1,...,xn)[1], f2(x1,...,xn)[1]), ..., (f1(x1,... ,xn)[m], f2(x1,...,xn)[m]).
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2015-08-03
相关资源
最近更新 更多