SymPy基础知识

4

我刚开始尝试使用SymPy,有些行为让我感到惊讶,例如这不是我期望的结果:

>>> import sympy as s
>>> (-1)**s.I == s.E**(-1* s.pi)
False
>>> s.I**s.I == s.exp(-s.pi/2)
False

这些为什么返回False,是否有办法将一个复数的书写方式转换为另一种方式?
2个回答

9

常见问题解答中:

为什么SymPy会说两个相等的表达式不相等?

等号(==)测试表达式是否具有相同的形式,而不是它们在数学上是否等价。

为了使基本情况下的等式测试有用,SymPy在计算它们时尝试将数学上等价的表达式重写为规范形式。例如,SymPy将x+x和-(-2*x)都简化为2*x,将x*x简化为x**2。

默认转换无法生成规范形式的最简单的示例是非线性多项式,它可以表示为分解和展开形式。尽管显然 a(1+b) = a+ab 在数学上是正确的,但SymPy给出:

>>> bool(a*(1+b) == a + a*b) False 

同样地,SymPy无法检测到差值为零:
 >>> bool(a*(1+b) - (a+a*b) == 0) False  

如果您想确定非平凡表达式的数学等价性,应该对方程两边应用更高级的简化程序。在多项式的情况下,可以通过完全展开表达式来将其重写为规范形式。这可以使用SymPy中的.expand()方法来完成:

>>> A, B = a*(1+b), a + a*b 
>>> bool(A.expand() == B.expand()) True 
>>> (A - B).expand() 0 

如果 .expand() 没有帮助,尝试使用 simplify()trigsimp() 等更高级的转换方法。例如,
>>> trigsimp(cos(x)**2 + sin(x)**2) == 1 True

0

因为它们不相等。试试这个:

s.E **(s.I * s.pi)== s.I * s.I


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接