我有一个带有索引变量的方程组。我想要的是解决一个变量的动态函数并取消另一个变量。例如:
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]。
我该怎么办?谢谢你。
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]: ────⎬⎥
⎣⎩ β ⎭⎦