使 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 开始它就可以工作了。
在 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 开始它就可以工作了。