使 SymPy 符号仅引用实数集

Making SymPy symbols refer to the set of real numbers only

在 Sympy 中使用符号时,了解符号仅指代复数的某个子集有时对库很有用。示例:theta = sympy.symbols('theta') 当馈入 sin 函数并采用复共轭 sympy.conjugate(sympy.sin(theta)) 时,理想情况下会产生 sin(theta),因为 theta 只会是实数,而复共轭只会取反复数的虚部。相反,它给出 sin(conjugate(theta)) 这表明 sympy 没有语义理解 theta 永远不会有非零虚部。

这可能会导致问题,因为 sin(theta) 不一定与 sin(conjugate(theta)) 相同。有没有办法告诉 SymPy 给定的符号是一个实数,这样 sin(conjugate(theta)) 会自动简化为 sin(theta)

您应该在声明时使用real=True,即:

import sympy as sym
from sympy import conjugate, sin

theta = sym.Symbol('theta', real=True)

sin(conjugate(theta))
# evaluates to: sin(theta)

conjugate(sin(theta))
# evaluates to: sin(theta)

同时:

zeta = sym.Symbol('zeta')

sin(conjugate(zeta))
# evaluates to: sin(conjugate(zeta))

conjugate(sin(zeta))
# evaluates to: conjugate(sin(zeta))

如果符号未声明为 real

编辑:这可以在 older tutorials 之一中找到。我不确定为什么在较新的教程中没有涵盖这一点,但从 SymPy 1.4 开始它就可以工作了。