如何在 sympy 中求解带有索引变量的方程组?

问题描述 投票:0回答:1

我有一个带有索引变量的方程组。我想要的是解决一个变量的动态函数并取消另一个变量。例如:

from sympy import symbols, IndexedBase, Eq, solve

t = symbols('t', interger=True)
β = symbols('β')
c, λ = symbols('c λ', cls=IndexedBase)

eq1=Eq(c[t],λ[t])
eq2=Eq(λ[t],β*λ[t+1])

solve([eq1,eq2],[c[t],c[t+1]])

我得到结果:

{c[t]: λ[t]}
。是的,但我真正想要的是一个函数来显示 c[t] 和 c[t+1] 之间的关系,如 c[t+1]=f(c[t]) (没有 λ[t]) 。这里的结果应该是 c[t+1]=1/β*c[t]。

我该怎么办?谢谢你。

python sympy
1个回答
0
投票

solve
函数不适用于处理此类情况。它的目的是求解代数方程,因此像
c[t]
c[t+1]
这样的东西都被视为独立的代数变量。

你可以使用

resultant
得到你想要的东西:

In [15]: from sympy import symbols, IndexedBase, Eq, solve
    ...: 
    ...: t = symbols('t', interger=True)
    ...: β = symbols('β')
    ...: c, λ = symbols('c λ', cls=IndexedBase)
    ...: 
    ...: eq1=Eq(c[t],λ[t])
    ...: eq2=Eq(λ[t],β*λ[t+1])

In [16]: resultant(eq1, eq2, λ[t])
Out[16]: β⋅λ[t + 1] - c[t]

In [17]: resultant(resultant(eq1, eq2, λ[t]), eq1.subs(t, t+1), λ[t + 1])
Out[17]: β⋅c[t + 1] - c[t]

In [18]: solve(_, c[t+1], dict=True)
Out[18]: 
⎡⎧          c[t]⎫⎤
⎢⎨c[t + 1]: ────⎬⎥
⎣⎩           β  ⎭⎦
© www.soinside.com 2019 - 2024. All rights reserved.