Sympy中Meijer G函数参数吸收等基础化简实现方法问询
SymPy Meijer G函数化简相关问题
背景
Meijer G函数是处理随机变量乘积运算的实用工具,由于Sage及其他免费开源数学软件均未内置该函数,开展相关主题研究时可选择SymPy完成相关计算。
SymPy提供的meijerg模块具备丰富功能,导入模块本身及积分相关依赖sympy.integrals.meijerint后,可完成绘图、参数反转(调用内置工具_flip_g)、数值计算等基础操作,但经过多次测试,始终无法让SymPy完成部分最基础的化简操作,典型场景为参数幂的“吸收”化简。
问题复现
首先完成符号与自定义Meijer G函数的定义:
b1,b2,b3,b4,b5,d1,d2,d3,d4,d5 = symbols('b1 b2 b3 b4 b5 d1 d2 d3 d4 d5') a1,a2,a3,a4,a5,c1,c2,c3,c4,c5 = symbols('a1 a2 a3 a4 a5 c1 c2 c3 c4 c5') y,w,z = symbols('y w z', positive=True) def G1(x): return meijerg([[a1,a2,a3],[a4,a5]], [[b1,b2],[b3,b4]], x) def G2(x): return meijerg([[c1,c2],[c3]], [[d1,d2,d3],[d4]], x)
使用两种不同积分接口执行0到无穷区间的卷积积分计算,返回结果存在明显差异:
- 调用内部非公开积分函数
_int0oo:
运行返回的结果始终无法完成分母中y项的吸收化简。Ris = _int0oo(G1(y*x), G2(w*x), x) Ris - 调用标准公开积分接口
integrate:
运行返回结果的第一行即为预期的参数吸收化简后形式。integrate(G1(y*x)*G2(w*x), (x, 0, oo))
待解决问题
- 为什么直接调用内部
_int0oo函数无法自动完成参数幂的吸收化简? - 如何通过
meijerg包内提供的_rewrite1、_guess_expansion等内置工具实现该类化简操作?
补充说明
从评论反馈中我意识到自己踏入了新手误区,非常感谢Davide的提示。但除积分计算场景外,在积分运算执行前,针对Meijer G函数的各类基础代数操作(例如通过非公开工具
_flip_g实现的参数反转、参数幂吸收、将其他函数重写为Meijer G函数形式等)有很高的使用需求,想咨询是否有正规公开的途径可以访问调用这些内置工具?如果暂时没有公开调用方式,也在此恳请开发团队能够将这类工具开放为可直接调用的公开接口,非常感谢。
内容的提问来源于stack exchange,提问作者G Cab
相关产品推荐
相关产品推荐

