【问题标题】:sympy seems to fail solving a system of non-linear equations while being able to solve them separatelysympy 似乎无法解决非线性方程组,但能够单独解决它们
【发布时间】:2022-01-21 13:59:44
【问题描述】:

我试图找到函数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 的导数表达式中将 y 替换为 1 或 -1,然后求解 x,我得到的结果是:

    sp.solve(f.diff(x).subs(y,1),x)

    :> [E]

[E,-1] 和 [E,1] 是方程组的解。但是,当我最初尝试求解方程组时,为什么 sympy 不能给我这些值对呢?

【问题讨论】:

标签: python sympy equation


【解决方案1】:

我不确定为什么系统求解器会失败,但如果您使用manual=True,您可以获得您的解决方案:

>>> eqs=[f.diff(x), f.diff(y)]
>>> solve(eqs,manual=1)
[{y: -1, x: E}, {y: 1, x: E}]

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2022-09-27
  • 2020-08-31
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
相关资源
最近更新 更多