根据SymPy documentation on solve,第一个参数可以是:
一个Expr或Poly必须为零,
平等
关系表达式或布尔值
以上一项或多项
但是,有时如果它是solve(equation, x)solve([equation], x),它确实会产生影响。[equation]应该是equation的iterable,对吧?我真的很困惑为什么有时候这只是个问题。
你可以在下面的MCVE中看到我的问题:

from sympy import *
x, y = symbols("x y")

def test_sympy_solve(equation):
    print("For given equation", equation, "...")
    print("... solve(equation, x) finds", len(solve(equation, x)), "solutions")
    print("... solve([equation], x) finds", len(solve([equation], x)), "solutions\n")

test_sympy_solve(Eq((x + 1)**2 - 1, y))
test_sympy_solve(Eq((x + 1)**3 - 1, y))

输出为:
For given equation Eq((x + 1)**2 - 1, y) ...
... solve(equation, x) finds 2 solutions
... solve([equation], x) finds 2 solutions

For given equation Eq((x + 1)**3 - 1, y) ...
... solve(equation, x) finds 3 solutions
... solve([equation], x) finds 0 solutions

Eq((x + 1)**2 - 1, y)两次都得到两个解,Eq((x + 1)**3 - 1, y)没有。怎么回事?

最佳答案

可能是虫子。向SymPy的问题跟踪者提交了一个问题:#12326
我会不断更新这个答案。

10-07 15:15