gpt4 book ai didi

python - SymPy 基础知识

转载 作者:太空狗 更新时间:2023-10-30 02:06:40 24 4
gpt4 key购买 nike

我刚开始玩 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,有没有办法让它从一种写复数的方式转换为另一种写复数的方式?

最佳答案

来自FAQ :

为什么 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

关于python - SymPy 基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1954799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com