如何用SymPy正确计算含双期变量的有限级数导数?
解决SymPy中含双期变量有限级数的导数计算问题
你的代码核心问题是求和哑变量t与求导用的自由变量t重名,SymPy会将求和内的t视为局部哑变量,无法关联到求导时的自由变量t,因此仅识别到β*a[t]这一项的导数贡献。
修正方案
将求和的哑变量替换为另一个符号(如tau),明确区分自由变量与求和哑变量,让SymPy正确识别a[t]在级数中的两次出现:
from sympy import symbols, Sum, diff, IndexedBase, Idx T = symbols('T', integer=True) tau = symbols('tau', integer=True) # 求和哑变量改用tau t = symbols('t', integer=True) β, σ = symbols('β σ') a = symbols('a', cls=IndexedBase) L = Sum(β * a[tau] + σ * a[tau + 1], (tau, 0, T)) print(diff(L, a[t]))
结果说明
运行上述代码将输出β + σ,符合预期。原理是:
- 当
tau = t时,β*a[tau]对应β*a[t],导数为β; - 当
tau = t-1时,σ*a[tau+1]对应σ*a[t],导数为σ; - 其他
tau值的项不含a[t],导数为0;
所有有效贡献相加即得到β + σ。
内容的提问来源于stack exchange,提问作者Bayes
相关产品推荐
相关产品推荐

