代码之家  ›  专栏  ›  技术社区  ›  Steve T.

Symphy中“绝对值不能在复域中求逆”错误的解决方法

  •  3
  • Steve T.  · 技术社区  · 7 年前

    我有以下等式:

    Eq(5*Abs(4*x+2)+6,56). 
    

    我想做的是解决 x = -3 对于数学问题 5 |4x+2|+6=56 ,但我一直得到

    “绝对值不能在复杂域中反转”

    Symphy中出错。

    有办法解决这个问题吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   Stelios    7 年前

    您必须指定 x 是实值变量。您可以在如下定义变量时执行此操作。

    import sympy as sp
    x = sp.symbols('x', real = True)
    eq = sp.Eq(5*sp.Abs(4*x+2)+6,56)
    sol = sp.solve(eq, x)
    print(sol)
    

    [-3, 2]

    编辑:编辑 sympy.solveset 函数可以用来代替 sympy.solve . 在这种情况下,您需要明确声明您正在reals域上求解。这样,就不必将变量定义为实数。

    import sympy as sp
    x = sp.symbols('x') # implies that x is complex
    eq = sp.Eq(5*sp.Abs(4*x+2)+6,56)
    sol = sp.solveset(eq, x, domain=sp.S.Reals)
    print(sol)
    

    {-3, 2}