我想求解一组三个非线性方程。像
f1 = 1.02226923451805*x**2 - 1.9683360808094*x*y + 1.03639538768756*y**2 - 49
f2 = 1.03639538768756*y**2 - 2.03796060801355*y*z + 1.04842646546047*z**2 - 25
f3 = 1.02226923451805*x**2 - 1.93479820599624*x*z + 1.04842646546047*z**2 - 74
在Matlab中,我可以使用Solve获得八个解决方案:
-20.3224 -22.8100 -23.1694
-23.5467 -22.9631 -23.1503
-23.6222 -22.1818 -23.0558
-23.6372 -22.4943 -20.5865
23.6372 22.4943 20.5865
23.6222 22.1818 23.0558
23.5467 22.9631 23.1503
20.3224 22.8100 23.1694
在python中,我尝试使用sympy的solve_poly_equations,但返回None。我也尝试了scipy的fsolve,但这只会基于初始猜测返回一个解决方案。
from sympy import solve_poly_system
from sympy.abc import x,y,z
f1 = 1.02226923451805*x**2 - 1.9683360808094*x*y + 1.03639538768756*y**2 - 49
f2 = 1.03639538768756*y**2 - 2.03796060801355*y*z + 1.04842646546047*z**2 - 25
f3 = 1.02226923451805*x**2 - 1.93479820599624*x*z + 1.04842646546047*z**2 - 74
s = solve_poly_system([f1, f2, f3], x, y, z)
print(s)
>> None
from scipy.optimize import fsolve
def myFunc(v):
x = v[0]
y = v[1]
z = v[2]
f = empty((3))
f[0] = 1.02226923451805*x**2 - 1.9683360808094*x*y + 1.03639538768756*y**2 - 49
f[1] = 1.03639538768756*y**2 - 2.03796060801355*y*z + 1.04842646546047*z**2 - 25
f[2] = 1.02226923451805*x**2 - 1.93479820599624*x*z + 1.04842646546047*z**2 - 74
return f
s = fsolve(myFunction, [1, 1, 1])
print(s)
>> [23.63719275 22.49425691 20.58646335]
我正在尝试解决一个重要问题,那就是必须返回所有可能的解决方案。 Python中有没有一种方法可以像Matlab一样提供全部八个解决方案?