sympy 似乎无法解决非线性方程组,同时能够分别解决它们
sympy seems to fail solving a system of non-linear equations while being able to solve them separately
我试图找到函数 f(x,y)
的一阶导数为零的点 (x,y)
。函数是f = x * log((y^2)/x) - x*(y^2) + 3*x
.
如果我尝试在 sympy 中求解方程组,我会得到答案 (x,1)
和 (x,-1)
,我认为这意味着“无论 x 的值是多少”并且 y 等于 1
或 -1
。代码如下:
import sympy as sp
x, y = sp.symbols("x y", real = True)
f = x * sp.log((y**2)/x) - x*(y**2) + 3*x
sp.solve([f.diff(x), f.diff(y)],[x,y])
:> [(x, -1), (x, 1)]
如果我首先尝试求解 f 关于 y 的导数,对于 y,我得到预期的结果 [1,-1]。 :
sp.solve(f.diff(y),y)
:> [-1,1]
然后,如果我尝试在 f 对 x 的导数表达式中用 1 或 -1 替换 y,然后求解 x,我得到的结果是:
sp.solve(f.diff(x).subs(y,1),x)
:> [E]
[E,-1]
和 [E,1]
对是方程组的解。但是,当我最初尝试求解方程组时,为什么 sympy 不能给我这些值对?
我不确定为什么系统求解器会失败,但是如果你使用 manual=True
你可以得到你的解决方案:
>>> eqs=[f.diff(x), f.diff(y)]
>>> solve(eqs,manual=1)
[{y: -1, x: E}, {y: 1, x: E}]
我试图找到函数 f(x,y)
的一阶导数为零的点 (x,y)
。函数是f = x * log((y^2)/x) - x*(y^2) + 3*x
.
如果我尝试在 sympy 中求解方程组,我会得到答案 (x,1)
和 (x,-1)
,我认为这意味着“无论 x 的值是多少”并且 y 等于 1
或 -1
。代码如下:
import sympy as sp
x, y = sp.symbols("x y", real = True)
f = x * sp.log((y**2)/x) - x*(y**2) + 3*x
sp.solve([f.diff(x), f.diff(y)],[x,y])
:> [(x, -1), (x, 1)]
如果我首先尝试求解 f 关于 y 的导数,对于 y,我得到预期的结果 [1,-1]。 :
sp.solve(f.diff(y),y)
:> [-1,1]
然后,如果我尝试在 f 对 x 的导数表达式中用 1 或 -1 替换 y,然后求解 x,我得到的结果是:
sp.solve(f.diff(x).subs(y,1),x)
:> [E]
[E,-1]
和 [E,1]
对是方程组的解。但是,当我最初尝试求解方程组时,为什么 sympy 不能给我这些值对?
我不确定为什么系统求解器会失败,但是如果你使用 manual=True
你可以得到你的解决方案:
>>> eqs=[f.diff(x), f.diff(y)]
>>> solve(eqs,manual=1)
[{y: -1, x: E}, {y: 1, x: E}]