【问题标题】:Solving quad root equation in sympy在 sympy 中求解四根方程
【发布时间】:2020-02-03 06:36:44
【问题描述】:

我正在尝试解决以下等式。

(x * x) - 1 = 0

结果应该是 +1 或 -1。但是当我尝试通过 sympy 解决它时,结果是一个空输出。

import sympy as sy

x = sy.Symbol('x')

sy.solve((x**2)-1, 0)

# sy.solve((x * x)-1, 0) and sy.solve((x * x), 1) returns the same result

>>> []

我在这里做错了什么?

【问题讨论】:

  • 问题是你没有阅读文档。

标签: python sympy solver


【解决方案1】:

你应该使用,

sy.solve((x**2)-1,x)

而不是,

sy.solve((x**2)-1,0)

第二个参数 x 表明方程应该针对 x 求解。您正在求解 0 的方程,这没有任何意义。

以后请仔细阅读文档:)

【讨论】:

    【解决方案2】:

    应该是

    >>> from sympy.solvers import solve
    >>> from sympy import Symbol
    >>> x = Symbol('x')
    >>> solve(x**2 - 1, x)
    

    阅读函数here的文档

    【讨论】:

      【解决方案3】:

      要么做

      sp.solve((x**2)-1, x)
      

      sp.solve((x**2) - 1)
      

      更多信息,您可以查看https://docs.sympy.org/latest/modules/solvers/solvers.html

      【讨论】:

        【解决方案4】:

        nsolve 中,第二个参数是对变量的初始猜测,这将使单变量表达式等于零:

        >>> nsolve(x**2-1, 0)
        1.00000000000000
        >>> nsolve(x**2-1, -3)
        -1.00000000000000
        

        然而,在solve 中,不需要初始猜测,因为方程将以符号方式求解:

        >>> nsolve(x**2-1)
        [-1, 1]
        

        solve 也可以处理多变量表达式,在这种情况下,第二个参数用于指示您要求解的变量。

        >>> solve(x**2-c)
        [{c: x**2}]
         >>> solve(x**2-c, x)
        [-sqrt(c), sqrt(c)]
        

        但您可以解决表达式中出现的任何内容,偶数。这就是为什么在您的情况下不会引发错误的原因(尽管可能零应该引发错误)。以下是求解数字的示例:

        >>> solve(3*x**2-c, 3)
        [c/x**2]
        >>> solve(3*x**4-c, 4)
        [log(c/3)/log(x)]
        >>> solve(2*x**2-c, 2)
        [LambertW(c*log(x))/log(x)]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多