差分方程式

簡単な差分方程式をMAXIMAで解く

計量経済学のなかの一つの専門分野として書かれた時系列分析のテキスト(例えばHamiltonやEnders)では書籍の最初の章で差分方程式の解法などが詳しく書かれていることがある。小生のような初学者にとっては、このような面倒な計算に習熟しないと先に進めないのかと暗い気持ちになり、最初につまずいてしまうが、差分方程式を解くだけであればMAXIMAの力を借りればなんとかなる。時系列が定常過程がどうか、安定性や反転可能性のチェックをするときに差分方程式の特性根を求めるので、そのための基礎知識として詳しく書かれているのだろうと勝手に解釈している。Rの時系列分析パッケージ(例えばforecast)を利用すれば、そのような計算は総て自動的に処理し、丁寧にユニットサークルや単位根のグラフまで示してくれるし、シミュレーションモデルが定常過程でない場合にはその旨も警告してくれるので、実務的にはあまり気落ちすることもなさそうに思う。

Walter Enders という学者のホームページに補助教材がアップされているので、それを参考にしてMAXIMAで簡単な2階の定係数線形差分方程式を解いてみる。MAXIMAによる出力は実数表示でないので一見すると違うように見えるが、正しく計算してくれている。

なお、Walter Endersのサイトは  http://time-series.net/   manuals のページで Supplementary Manual(PDF) がアップされている。

MAXIMAで差分方程式を解く場合には、最初に差分方程式用のパッケージ solve_rec をloadしておく必要がある。

 

load("solve_rec")$\( \DeclareMathOperator{\abs}{abs} \newcommand{\ensuremath}[1]{\mbox{$#1$}} \)
差分方程式 y[t]=0.50*y[t-1]+0.4*y[t-2]+a0 を解くと
(%i2) solve_rec(y[t]=0.50*y[t-1]+0.4*y[t-2]+a0,y[t])   ;
\[\mbox{}\\\mbox{rat: replaced -0.4 by -2/5 = -0.4}\mbox{}\\\mbox{rat: replaced -0.5 by -1/2 = -0.5}\] \[\tag{%o2} {y_t}=\frac{{{\left( \sqrt{185}-5\right) }^{t}}\, {{\mathit{\% k}}_1}\, {{\left( -1\right) }^{t}}}{{{20}^{t}}}+\frac{{{\left( \sqrt{185}+5\right) }^{t}}\, {{\mathit{\% k}}_2}}{{{20}^{t}}}+10 \mathit{a0}\]

%kは任意定数を示す。
(%i3) flaot(((sqrt(185.0)-5)*(-1))/20);
\[\tag{%o3} \operatorname{flaot}\left( -0.4300735254367722\right) \]
(%i4) flaot(((sqrt(185.0)+5)/20));
\[\tag{%o4} \operatorname{flaot}\left( 0.9300735254367722\right) \]
(%i5) solve_rec(y[t]=0.9*y[t-1]-0.2*y[t-2],y[t])  ;
\[\mbox{}\\\mbox{rat: replaced 0.2 by 1/5 = 0.2}\mbox{}\\\mbox{rat: replaced -0.9 by -9/10 = -0.9}\] \[\tag{%o5} {y_t}=\frac{{{\mathit{\% k}}_1}\, {{2}^{t}}}{{{5}^{t}}}+\frac{{{\mathit{\% k}}_2}}{{{2}^{t}}}\]
(%i6) flaot(2/5.0);
\[\tag{%o6} \operatorname{flaot}\left( 0.4\right) \]
(%i7) flaot(1/2.0);
\[\tag{%o7} \operatorname{flaot}\left( 0.5\right) \]

同次の線形2階差分方程式 y[t]=0.55*y[t-1]+0.2*y[t-2] を解くと
(%i8) solve_rec(y[t]=0.55*y[t-1]+0.2*y[t-2],y[t])   ;
\[\mbox{}\\\mbox{rat: replaced -0.2 by -1/5 = -0.2}\mbox{}\\\mbox{rat: replaced -0.55 by -11/20 = -0.55}\] \[\tag{%o8} {y_t}=\frac{{{\mathit{\% k}}_1}\, {{4}^{t}}}{{{5}^{t}}}+\frac{{{\mathit{\% k}}_2}\, {{\left( -1\right) }^{t}}}{{{4}^{t}}}\]
(%i9) flaot(4/5.0);
\[\tag{%o9} \operatorname{flaot}\left( 0.8\right) \]
(%i10) flaot(-1/4.0);
\[\tag{%o10} \operatorname{flaot}\left( -0.25\right) \]

Walter Enders  Applied econometric time series  John wiley & sons 1995 に差分方程式の解法手順が記されているが、その中で y[t]=0.9*y[t-1]-.0.2*y[t-2] + 3 で 初期値としてy[0]=13, y[1]=11.3 と仮定した場合の差分方程式の事例をMAXIMAで解いてみると
(%i11) solve_rec(y[t]=0.90*y[t-1]-0.20*y[t-2]+3.0,y[t],y[1]=11.3,y[0]=13)  ;
\[\mbox{}\\\mbox{rat: replaced -3.0 by -3/1 = -3.0}\mbox{}\\\mbox{rat: replaced 0.2 by 1/5 = 0.2}\mbox{}\\\mbox{rat: replaced -0.9 by -9/10 = -0.9}\mbox{}\\\mbox{rat: replaced -1.300000000000001 by -13/10 = -1.3}\] \[\tag{%o11} {y_t}=\frac{{{2}^{t+1}}}{{{5}^{t}}}+\frac{1}{{{2}^{t}}}+10\]

そのほかに各種テキストによく出て来るような、定係数の線形2階差分方程式を幾つか解いてみる。
y[t]=0.7*y[t-1]+.0.6*y[t-2]  初期値なしの差分方程式をMAXIMAで解くと
(%i12) solve_rec(y[t]=0.7.y[t-1]+0.6*y[t-2],y[t])  ;
\[\mbox{}\\\mbox{rat: replaced -0.6 by -3/5 = -0.6}\mbox{}\\\mbox{rat: replaced -0.7 by -7/10 = -0.7}\] \[\tag{%o12} {y_t}=\frac{{{\mathit{\% k}}_1}\, {{6}^{t}}}{{{5}^{t}}}+\frac{{{\mathit{\% k}}_2}\, {{\left( -1\right) }^{t}}}{{{2}^{t}}}\]

y[t]=3.0*y[t-1]-2.0*y[t-2]  初期値としてy[0]=2, y[1]=3 の差分方程式をMAXIMAで解くと
(%i13) solve_rec(y[t]=3.0*y[t-1]-2.0*y[t-2],y[t],y[1]=3,y[0]=2) ;
\[\mbox{}\\\mbox{rat: replaced 2.0 by 2/1 = 2.0}\mbox{}\\\mbox{rat: replaced -3.0 by -3/1 = -3.0}\] \[\tag{%o13} {y_t}={{2}^{t}}+1\]

y[t]=y[t-1]+6.0*y[t-2]  初期値としてy[0]=2, y[1]=14 の差分方程式をMAXIMAで解くと
(%i14) solve_rec(y[t]=y[t-1]+6.0*y[t-2],y[t],y[1]=14,y[0]=2) ;
\[\mbox{}\\\mbox{rat: replaced -6.0 by -6/1 = -6.0}\] \[\tag{%o14} {y_t}=\frac{{{\left( -2\right) }^{t+3}}}{5}+\frac{2 {{3}^{t+2}}}{5}\]
Created with wxMaxima.


 金融工学の初等的計算例 目次