为了账号安全,请及时绑定邮箱和手机立即绑定

Sympy 无法计算涉及伽马函数的无限和

Sympy 无法计算涉及伽马函数的无限和

犯罪嫌疑人X 2021-06-01 09:45:49
我正在使用 Sympy 来评估一些涉及gamma函数操作的符号和,但我注意到在这种情况下,它不评估和并保持未评估。import sympy as spa = sp.Symbol('a',real=True)b = sp.Symbol('b',real=True)d = sp.Symbol('d',real=True)c = sp.Symbol('c',integer=True)z = sp.Symbol('z',complex=True)t = sp.Symbol('t',complex=True)sp.simplify(t-sp.summation((sp.exp(-d)*(d**c)/sp.gamma(c+1))/(z-c-a*t),(c,0,sp.oo)))然后我需要对这个表达式进行lambdify,不幸的是这变得不可能。但是,使用 Matlab 符号工具箱,我得到以下答案:MATLAB>> a=sym('a') >> b=sym('b');>> c=sym('c')>> d=sym('d');>> z=sym('z');>> t=sym('t');>> symsum((exp(-d)*(d^c)/factorial(c))/(z-c-a*t),c,0,inf)ans = (-d)^(z - a*t)*exp(-d)*(gamma(a*t - z) - igamma(a*t - z, -d))正如预期的那样,该公式涉及较低的不完全伽马函数。知道为什么会出现这种行为吗?我认为 sympy 能够象征性地进行这个求和。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

使用 SymPy 1.2 运行您的代码会导致

d**(-a*t + z)*exp(-I*pi*a*t - d + I*pi*z)*lowergamma(a*t - z, d*exp_polar(I*pi)) + t

顺便说一句,summation已经尝试评估总和(并且在 SymPy 1.2 的情况下成功),随后的简化是装饰性的。(有时可能是有害的)。

exp_polarSymPy的存在意味着 SymPy 发现有必要考虑对数函数的黎曼曲面上的点而不是常规复数。(相关的文档位)。该函数lower_gamma是分支的,因此我们必须区分“-1 处的值,如果我们从 1 顺时针方向到达 -1”和“-1 处的值,如果我们逆时针方向从 1 到达 -1”。前者是exp_polar(-I*pi),后者是exp_polar(I*pi)

所有这些都非常有趣,但在您需要对表达式进行具体评估时并没有真正的帮助。我们必须去极化这个表达式,从 Matlab 显示的内容来看,在这里简单地替换exp_polarexp是正确的方法。

rv = sp.simplify(t-sp.summation((sp.exp(-d)*(d**c)/sp.gamma(c+1))/(z-c-a*t),(c,0,sp.oo)))rv = rv.subs(sp.exp_polar, sp.exp)

结果: d**(-a*t + z)*exp(-I*pi*a*t - d + I*pi*z)*lowergamma(a*t - z, -d) + t

这里还有一些事情需要考虑,比如复数等等。是d积极的还是消极的?将其提升到幂-a*t+z是什么意思,我们采用多值幂函数的哪个分支?Matlab 输出中也存在同样的问题,在那里-d被提升到一个幂。

我建议使用浮点输入(序列的直接求和与 SymPy 表达式的评估)来测试它,并在d可能的情况下添加对符号的假设。


查看完整回答
反对 回复 2021-06-06
  • 1 回答
  • 0 关注
  • 324 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号