我用sympy来验证一些手工计算,版本是anaconda和
import sympy as sp
sp.__version__
'1.11.1'
字符串
Windows 11 Jupyter笔记本
代码运行如下
from sympy import Function
eta = Function('eta')
from sympy import *
s,c,h=symbols('s c h',real=True)
A,B =symbols("A B")
q=exp(-2*pi*exp(s))
chi_0=eta(s)**(-1) * q**(0-(c-1)/24)*(1-q)
型
下面的代码
print( chi_0.diff(s).subs((eta(s)**(-1)).diff(s),-B) .subs(eta(s)**(-1),A) .subs(s,0) )
型
产生了正确的结果
print( chi_0.diff(s).subs((eta(s)**(-1)).diff(s),-B) .subs(eta(s)**(-1),A) .subs(s,0) )
-2*pi*A*(1/24 - c/24)*(1 - exp(-2*pi))*exp(-2*pi*(1/24 - c/24)) + 2*pi*A*exp(-2*pi)*exp(-2*pi*(1/24 - c/24)) - B*(1 - exp(-2*pi))*exp(-2*pi*(1/24 - c/24))
型
请注意项-2*pi*A*(1/24 - c/24)*(1 - exp(-2*pi))*exp(-2*pi*(1/24 - c/24))
中的符号。然而,当我试图取消*exp(-2*pi*(1/24 - c/24))
时,
#bug
print( (( chi_0.diff(s).subs((eta(s)**(-1)).diff(s),-B) .subs(eta(s)**(-1),A) .subs(s,0) )/exp(pi*(c-1)/12) ).simplify() )
(-pi*A*(1 - exp(2*pi))*(c - 1)/12 + 2*pi*A + B*(1 - exp(2*pi)))*exp(-2*pi)
型
请注意,其中两项(-pi*A*(1 - exp(2*pi))*(c - 1)/12
和B*(1 - exp(2*pi)))*exp(-2*pi)
获得了错误的符号,而2*pi*A
的符号保持正确。
虽然扩展语句可以修复结果,
print( (( chi_0.diff(s).subs((eta(s)**(-1)).diff(s),-B) .subs(eta(s)**(-1),A) .subs(s,0) ).expand()/exp(pi*(c-1)/12) ).simplify() )
-pi*A*c*exp(-2*pi)/12 + pi*A*c/12 - pi*A/12 + 25*pi*A*exp(-2*pi)/12 - B + B*exp(-2*pi)
型
但没有用。
这是怎么发生的?
1条答案
按热度按时间dba5bblo1#
您可以通过一个简单的示例来查看该行为:
字符串
你可以看到发生了两件事:因子的顺序被改变了(但这对交换因子是可以的),two 因子的符号被改变了(这保留了整体符号)。
如果你对两个表达式是否相等有疑问,你可以尝试以下方法(如果不能判断,将返回None):
型
signsimp
是简化过程的一部分,并且可能是因子内的符号改变的原因之一。