【发布时间】:2022-07-13 03:20:22
【问题描述】:
我正在尝试找到以下系统的解决方案,其中 f 和 g 是 R^2 -> R^2 函数:
f(x1,x2) = (y1,y2)
g(y1,y2) = (x1,x2)
我尝试使用 scipy.optimize.fsolve 解决它,如下所示:
def eqm(vars):
x1,x2,y1,y2 = vars
eq1 = f([x1, x2])[0] - y1
eq2 = f([x1, x2])[1] - y2
eq3 = g([y1, y2])[0] - x1
eq4 = g([y1, y2])[1] - x2
return [eq1, eq2, eq3, eq4]
fsolve(eqm, x0 = [1,0.5,1,0.5])
虽然它正在返回一个输出,但它似乎不是一个正确的输出,因为它似乎不满足这两个条件,并且似乎与指定的 x0 变化很大。还收到警告: “根据过去十次迭代的改进来衡量,迭代没有取得良好的进展。”我确实知道存在一个独特的解决方案,这是我通过代数获得的。
不确定发生了什么,以及是否有更简单的解决方法,尤其是仅使用两个方程而不是分成 4 个方程。类似:
def equations(vars):
X,Y = vars
eq1 = f(X)-Y
eq2 = g(Y)-X
return [eq1, eq2]
fsolve(equations, x0 =[[1,0.5],[1,0.5]])
对其他模块的建议,例如也欢迎同情!
【问题讨论】:
-
欢迎来到 SO。您能否提供
f和g以便您的问题包含minimal reproducible example? -
谢谢,我已经添加了。但恐怕不是太“小”
标签: python numpy scipy sympy equation-solving