大きな転置推移確率行列(p061-markovpde02)
情報
- 出題:2021-05-24
- 実行/提出期限:2021-05-31 14:00:00
- 提出
- markovpde02.c プログラム.
- markovpde02.xlsx データとグラフを含むExcelワークシート
学習目標
- マルコフ連鎖の状態空間が大きいとき, 転置推移確率行列\(M\)の規則性を利用して, 「転置推移確率行列\(M\)を確率ベクトル(分布)\(\vec{p}\)にかける」関数を書ける.
課題
状況の説明
\(x\)軸の格子点からなる状態空間 \(S=\{x|0\leq x \leq m-1, x\in\mathbb{Z}\}\{0,1,2,3,\ldots,m-1\}\) 上のマルコフ連鎖を考える.
\(m\)の値と転置推移確率行列は, 提出場所付近から得ること.
初期分布を \( p(x,0)= \begin{cases} 1 & (x=9)\\ 0 & (\text{他})\\ \end{cases} \) とする.課題のタスク
- 下の仕様のプログラムを作ろう. ただし, \(m\times m\)の行列を書かずに, \(M\)の規則性を利用して関数 int multiply_trans(double np[], double p[], int m) を書こう. 両端の2-4行分くらい例外扱いしないといけないでしょう.
- Excelで, (前回の課題と異なり)横軸 x, 縦軸 p で, \(p(x,t)\)の \(t=0,1,2,\ldots,30\) の31本の折れ線グラフを描こう(xとtの見出しを手でつけた後, . もし横軸がxでなくtになってたら, ).
プログラムの入力
- 最終時刻T(0以上の整数)
プログラムの入力例
3
プログラムの出力
- 1行目に#T=に続いて 最終時刻\(T\)
- 2行目にコンマで区切って, 時刻t=0の\(t, p_0,p_1,p_2,p_3,\ldots,p_{m-1},\).ただし, 小数点以下15桁まで表示.
- 3行目にコンマで区切って, 時刻t=1の\(t, p_0,p_1,p_2,p_3,\ldots,p_{m-1},\)
- …
- T+1行目にコンマで区切って, 時刻t=Tの\(t, p_0,p_1,p_2,p_3,\ldots,p_{m-1},\)
プログラムの出力例
#T=3 0,0.0,0.0,…,0.0,0.0, 1,0.0,0.0,…,0.0,0.0, 2,0.0,0.0,…,0.0,0.0, 3,0.0,0.0,…,0.0,0.0,
アドバイス
- multiply_trans の作り方は L07 の動画と Quiz
- multiply_trans が正しく書けたかどうかは, test_multiply_trans.cにこの関数をペーストして実行すると検証できるかも. このプログラムは, 行列 \(M\)の転置, すなわち転置推移確率行列の転置, 転置確率行列の転置を出力する.
- multiply_trans が正しく書けたかどうかは, (1,0,0,...,0) のような簡単な初期条件を与えて, p(1)が正しく求まるかをチェックするといいかも. それ結局上と同じだけど.