モンテカルロ法で円周率の近似を試してみる.
環境
・Windows10
・Visual studio2017 Community
- モンテカルロ法とは
モンテカルロ法は乱数を用いた数値計算の総称らしい.
確率ロボティクスの勉強をしている際にモンテカルロ法が出てきたが何が何だかわからなかったので,とりあえず円周率の近似をしてみる.
ロボットの自立走行では,オドメトリに対して誤差を与えて計算をして,事後姿勢(パーティクルと呼ぶらしい)を誤差の数分だけ用意して自己位置を推定するもの(まだまだ理解が甘い).
まあ,前述したとおり,とりあえず円周率を計算してなんとなく理解をしていく.
- 手法
C++で2次元の配列を用意して,ランダムで数値を与えていく.数値はすべて0~1で設定する.それぞれxとyのパラメータをもっている.2次元直交座標系において,原点からの距離が1以下の点を抽出していく.これをXとしておく.また,原点からの距離が1を超える点の個数と1以下の点の総数をNとしておく.
今回は,距離が1以下の点を青色,1を超える点を赤色でプロットしていく.
その際に青色の点と赤色の点の個数から,円周率を近似することができる.
ここで,式が4*X/Nである.4倍するのは,今回生成するランダムの数値は,0~1なので,1象限のみとなっているので,ほかの2~4の点も考慮するからである. - 結果
次の動画のように青い点群データが円の形になっているのがわかる.
横に円周率の近似値とparticleの数を出しているが,あんまり精度が出ない.
- 今後
今後はモンテカルロ法とオドメトリの関係性を調べて,デッドレコニングをより高い精度で行うための技術を確立していきた.そのためにも円周率の近似についてはこれからもちょくちょくしていくと思う.