如何在SymPy中求解含索引变量的方程组并消元?
解决SymPy索引方程组消元问题
要得到c[t+1]与c[t]的关系,核心是明确**c和λ的索引关系对所有整数t都成立**,即t+1时刻同样满足c[t+1] = λ[t+1]。以下是两种可行方法:
方法一:补充索引关系方程
直接添加t+1时刻的c与λ的等式,将三个方程联立求解:
from sympy import symbols, IndexedBase, Eq, solve # 修正拼写错误:interger → integer t = symbols('t', integer=True) β = symbols('β') c, λ = symbols('c λ', cls=IndexedBase) eq1 = Eq(c[t], λ[t]) eq2 = Eq(λ[t], β * λ[t+1]) # 补充t+1时刻的对应关系 eq3 = Eq(c[t+1], λ[t+1]) # 直接求解c[t+1],自动消去λ变量 result = solve([eq1, eq2, eq3], c[t+1], dict=True) print(result) # 输出:[{c[t+1]: c[t]/β}]
方法二:手动变量替换
利用已知的c[t] = λ[t],将λ[t]和λ[t+1]替换为c[t]和c[t+1]后求解:
from sympy import symbols, IndexedBase, Eq, solve t = symbols('t', integer=True) β = symbols('β') c, λ = symbols('c λ', cls=IndexedBase) eq1 = Eq(c[t], λ[t]) eq2 = Eq(λ[t], β * λ[t+1]) # 将λ的索引变量替换为对应的c变量 substituted_eq = eq2.subs({λ[t]: c[t], λ[t+1]: c[t+1]}) # 求解c[t+1] result = solve(substituted_eq, c[t+1], dict=True) print(result) # 输出:[{c[t+1]: c[t]/β}]
关键说明
原代码未得到预期结果,是因为SymPy无法自动推断t+1时刻c与λ的对应关系——必须显式提供该关系,才能完成消元并得到c的动态递推式。
内容的提问来源于stack exchange,提问作者Bayes
相关产品推荐
相关产品推荐

