大きな転置推移確率行列(p061-markovpde02)

Time-stamp: "2021-05-24 Mon 06:40 JST hig"

情報

  • 出題: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)が正しく求まるかをチェックするといいかも. それ結局上と同じだけど.

自分でチェック!

このサイトのコンテンツ

QRcode to hig3.net

https://hig3.net