You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用SymPy 1.14实现不完全Gamma函数的符号化Pade逼近

获取不完全Gamma函数组合的符号Pade逼近(SymPy 1.14)

步骤1:定义符号与原函数

首先导入SymPy并定义符号s,写出目标函数:

import sympy as sp
s = sp.symbols('s')
# 定义原函数
fs = sp.Rational(3,2)*(s**sp.Rational(3,2))*sp.exp(s)*sp.uppergamma(-sp.Rational(3,2), s)

步骤2:化简原函数(可选但推荐)

原函数包含上不完全Gamma函数,可通过SymPy化简为初等函数组合,便于后续处理:

fs_simplified = sp.simplify(fs)
print(fs_simplified)
# 输出:3*sqrt(s)*(s + 1)*exp(s)*erfc(sqrt(s)) + sqrt(pi)*(2*s + 3)*sqrt(s)

步骤3:构造泰勒展开式

由于原函数包含s^(3/2)项,直接展开会得到分数幂级数,可通过两种方式处理:

方式A:分离分数幂项

将原函数拆分为s^(1/2)乘以解析函数h(s),对h(s)展开:

# 分离出sqrt(s),得到解析函数h(s)
h = sp.expand(fs / s**sp.Rational(1,2))
# 求h(s)在s=0处的泰勒展开(保留到s^3项)
series_h = h.series(s, 0, 4).removeO()
print(series_h)

方式B:变量替换为整数幂

令t = sqrt(s),将原函数转换为t的整数幂级数:

t = sp.symbols('t')
fs_t = fs.subs(s, t**2)
# 求fs_t在t=0处的泰勒展开(保留到t^6项,对应原函数的s^3项)
series_fs_t = fs_t.series(t, 0, 7).removeO()
print(series_fs_t)

步骤4:生成Pade逼近

使用SymPy的pade()函数,传入泰勒展开式和分子/分母的次数,得到符号形式的Pade逼近:

基于方式A的实现

# 生成h(s)的Pade逼近(分子2次,分母2次)
p_h, q_h = sp.pade(series_h, 2, 2)
# 还原原函数的Pade逼近
pade_fs = sp.simplify(s**sp.Rational(1,2) * p_h / q_h)
print(pade_fs)

基于方式B的实现

# 生成fs_t的Pade逼近(分子3次,分母3次)
p_t, q_t = sp.pade(series_fs_t, 3, 3)
# 替换回s,得到原函数的Pade逼近
pade_fs = sp.simplify((p_t / q_t).subs(t, sp.sqrt(s)))
print(pade_fs)

注意事项

  • 分子/分母的次数可根据精度需求调整,次数越高逼近精度越好,但表达式也会更复杂。
  • SymPy 1.14的pade()函数支持处理分数幂级数,但变量替换为整数幂的方式更稳妥,避免潜在的解析问题。

内容的提问来源于stack exchange,提问作者Pankit Chahal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 10:33:37