Python Scipy——非线性方程组的所有解

Python Scipy——非线性方程组的所有解,python,numpy,scipy,equation-solving,nonlinear-functions,Python,Numpy,Scipy,Equation Solving,Nonlinear Functions,我有一个非线性方程组,其中可以选择任意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} 根据,我使用scipy库的fsolve()来解决这样一个NLE,但对于*x=x0的每个初始近似值,它只返回一个解。但是,由于n可能很大(例如,n=100),并

我有一个非线性方程组,其中可以选择任意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}
根据,我使用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=F解(方程式,(0,0)) (0.0,0.0)

是否可以使用任何Scipy函数(如fsolve())来查找所有解决方案(根),例如: x、 y=一些解算器(方程,(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即使是单个非线性方程,也很难(或不可能)在数值上找到所有解,更不用说系统了。例如,考虑方程,

sin(1/x) = 0
在区间
[0,1]
中有无穷多个解:用典型的根查找算法无法解决这个问题

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


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

p.S.我已经实现了函数系统,我需要,比如,和模块,通过使用fsolve(sys1,x0)来解决这些系统。因此,如果你也给我举一个fsolve()或method的例子,它可以简单地替换fsolve((f1,f2),x0)或fsolve([f1,f2],x0]),那将是非常有帮助的。我已经听说过Symphy,我尝试过Symphy.nsolve,它的工作方式与scipy的fsolve相同。所以现在我应该尝试使用sympy.solve,谢谢你的建议!据我所知,symphy.solve并没有给出数值解(只有解析函数作为根),是吗?是的,你是对的
symphy.solve
返回分析根,并应提供所有解。不幸的是,分析根x1=f(x2)不支持我的需要。我只需要数值解-我想要得到的最终结果应该是f1(x1,…,xn)=F(f2(x1,…,xn))的一个grathical图。所以,我只想得到点集(x1,…,xn)[1],…,(x1,…,xn)[m],数值求解,并绘制点集(f1(x1,…,xn)[1],f2(x1,…,xn)[1]),…,(f1(x1,…,xn)[m],f2(x1,…,xn)[m])。
sin(1/x) = 0