我从一个差分方程系统开始(一个过度简化的 Solow-Romer 经济模型):
其中t
下标表示离散时间,例如Y[t=0], Y[t=1], Y[t=2], ...
具体来说:
eq1: Y[t] = A[t]*K[t]^(1/3)*Ly[t]^(2/3);
eq2: K[t+1] - K[t] = s*Y[t] - d*K[t];
eq3: A[t+1] - A[t] = z*A[t]*La[t];
eq4: Ly[t] + La[t] = L;
eq5: La[t] = l*L;
Endogenous variables (unknowns), and their initial conditions:
Y[t] Y[0] = 9663.8253
K[t] K[0] = 100.0
A[t] A[0] = 100.0
Ly[t] Ly[0] = 95.0
La[t] La[0] = 5.0
Exogenous variables (givens):
s: 0.15;
d: 0.07;
z: 0.02;
l: 0.05;
L: 100.0;
这是 5 个未知数中的 5 个方程。在实践中以数值方式“求解”系统是微不足道的:您只需从t=0
初始条件开始,根据差分方程计算K[1]
和A[1]
,然后Y[1]
从中计算。
尽管它的本质是微不足道的,但我无法确定如何实际执行此操作并在 Maxima 中绘制结果曲线。
如果这更有利于Maxima的能力,我对微分方程方法(真正的微分代数)非常满意。无论如何,这在数值解中应该是等价的:
那是:
eq1: Y(t)=A(t)*K(t)^(1/3)*Ly(t)^(2/3);
eq2: diff(K(t),t) = s*Y(t)-d*K(t);
eq3: diff(A(t),t) = z*A(t)*La(t);
eq4: Ly(t)+La(t) = L;
eq5: La(t) = l*L;
但是,再一次,我看不到用 Runge-Kutta 或其他内置求解器对这个系统进行数值求解和绘图的方法(即使上面的代数方程可以很容易地改写为 形式0=f(Y,A,K,Ly,La)
)。
在这一点上,我还没有真正取得任何进展。我看到的用于差分方程 ( diff_rec2
) 的唯一工具是为此类系统的符号解设计的,但通常经济模型不能以封闭形式表示。Runge-Kutta ( rk
) 不接受代数方程(据我所知),我不知道下一步该往哪里看。
最终,鉴于此模型和类似模型的直接前向计算性质,我认为这将非常简单。也就是说,我确实想避免执行手动操作或将其变成特殊情况。我对此类方程组的一般求解方法特别感兴趣,因为我计划在未来实施更复杂的模型,例如 McKinnon (1997) 开放经济。
编辑:
感谢罗伯特(已接受)的回答,这是上述正向时间差方程示例的完整复制粘贴解决方案:
Y[t] := A[t]*K[t]^(1/3)*Ly[t]^(2/3);
K[t] := K[t - 1] + s*Y[t - 1] - d*K[t - 1];
A[t] := A[t - 1] + z*A[t - 1]*La[t - 1];
Ly[t] := L - La[t];
La[t] := l*L;
s : 0.15;
d : 0.07;
z : 0.02;
l : 0.05;
L : 100.0;
A[0] : 100.0;
K[0] : 100.0;
sol : makelist ([Y[n], K[n], A[n], Ly[n], La[t]], n, 0, 30);
v : makelist ([p-1, sol[p][1]], p, 1, 30);
plot2d ([discrete,v,0,30], logy);