Scilabで円周率の近似値

3月14日は円周率の日だからというわけではないですが、Scilabで楽しむ確率論に倣ってモンテカルロ法を用いた円周率の近似値計算を行いました。

001_20131105060858590.jpg

Fig.1: πのパイ(Wikipedia Pi pie2.jpg)


半径1の円の面積はπなので、その四分の一の面積はπ/4です。
したがって0≦x≦1, 0≦y≦1の範囲にランダムに点を打ち、半径r=1の円の中に入っている数を数えれば、円周率の近似値を求めることが出来ます。

今回はn=10000個の乱数の組(x,y)が半径r=1の円の中に入る数から円周率を求め、更にこれをm=1000回繰り返したときどの程度のばらつきがあるのかをヒストグラムにしました。


モンテカルロ法による円周率計算


0≦x≦1, 0≦y≦1の領域に一様分布に従うように点を打ったとき、半径r=1の円の中に入る点の数がπ/4に比例します。
以下のようなScilabプログラムにて円周率の近似値を得ることが出来ます。

n = 10000;
x = rand(1,n);
y = rand(1,n);

// グラフの縦横比を等しくする
h = scf(0); // ウィンドウを作成
clf(); // 表示をクリア
ha = h.children(1); // Axes(座標軸)オブジェクトへのハンドルを取得
ha.isoview = "on"; // 座標軸の縦横比を等しくする
ha.data_bounds = [0, 0; 1, 1]; // 座標軸表示範囲の設定

// 乱数の組(x,y)をプロット
plot(x,y,'.r','markersize',1);
// しきい値となる半径1の円のプロット
xx = linspace(0,1);
plot(xx,sqrt(1 - xx .^ 2),'-b');
// グラフのラベル
xlabel("x");
ylabel("y");

// 1回の計算から得られた円周率
p1 = sum(bool2s(x ^ 2 + y ^ 2 <= 1.0)) / n * 4


002_20131105060857b76.png

Fig.2: [0,1]×[0,1]の領域内にランダムに点を打ったとき、半径1の領域に打たれる点の頻度が近似的にπ/4になる。


繰り返し計算


以上の計算を更にm=1000回繰り返してどの程度のばらつきがあるのかをヒストグラムにしました。
乱数を格納するために大きなメモリを確保する必要があります。これにはstacksize関数を利用します。

m=1のときの計算も含めたScilabプログラムはcircle_sce.txtとなりました。

003_2013110506085769a.png

Fig.3: (n,m)=(10000,1000)のときのヒストグラム


関連エントリ




参考URL




付録


このエントリで使用したScilabのシミュレーション用ファイルを添付します。ファイル名末尾の".txt"を削除して、"_"を"."に変更すれば使えるはずです。(参考:ねがてぃぶろぐの付録)


参考文献/使用機器




フィードバック



にほんブログ村 その他趣味ブログ 電子工作へ

 ↑ 電子工作ブログランキング参加中です。1クリックお願いします。


コメント・トラックバックも歓迎です。 ↓      


 ↓ この記事が面白かった方は「拍手」をお願いします。

tag: Scilab モンテカルロ解析 乱数 ヒストグラム 円周率 

FC2カウンター
カテゴリ
ユーザータグ

LTspiceAkaiKKRmachikaneyamaScilabKKRPSoC強磁性PICCPAOPアンプecalj常微分方程式モンテカルロ解析状態密度odeトランジスタインターフェースDOS定電流スイッチング回路PDS5022半導体シェルスクリプト分散関係レベルシフト乱数HP6632Aトランジスタ技術ブレッドボード可変抵抗温度解析I2CR6452A反強磁性バンドギャップ確率論数値積分セミナー偏微分方程式絶縁バンド構造熱設計非線形方程式ソルバシュミットトリガISO-I2CLEDマフィンティン半径GW近似三端子レギュレータLM358A/DコンバータカオスフォトカプラUSBPC817C直流動作点解析サーボ74HC4053アナログスイッチTL431発振回路カレントミラー数値微分単振り子量子力学開発環境補間2ちゃんねるチョッパアンプbzqltyFFT電子負荷アセンブラBSchLDA標準ロジックパラメトリック解析ブラべ格子基本並進ベクトルイジング模型VESTAVCAMaximaSMPewidthGGA仮想結晶近似FET位相図キュリー温度QSGWTLP621ランダムウォーク不規則合金gfortranコバルト相対論失敗談抵抗状態方程式スレーターポーリング曲線ラプラス方程式スピン軌道相互作用スイッチト・キャパシタ六方最密充填構造熱伝導繰り返しcygwinTLP552条件分岐TLP521NE555LM555マントル詰め回路MCUテスタFXA-7020ZR三角波過渡解析ガイガー管自動計測Writer509UPSQNAPダイヤモンドデータロガー格子比熱熱力学平均場近似OpenMPブラウン運動スーパーセルUbuntuフェルミ面差し込みグラフubuntuハーフメタルfsolve最適化第一原理計算固有値問題シュレディンガー方程式最小値awk起電力井戸型ポテンシャルCIFxcrysden最大値結晶磁気異方性PGATeX非線型方程式ソルバ2SC1815等高線OPA2277面心立方構造初期値FSM正規分布interp1ウィグナーザイツ胞フィルタfccL10構造合金BaOウルツ鉱構造CapSense岩塩構造ルチル構造ZnO二相共存磁気モーメント不純物問題電荷密度重積分SICスワップ領域リジッドバンド模型multiplotジバニャン方程式gnuplotc/a全エネルギー半金属デバイ模型edeltquantumESPRESSOノコギリ波フォノン固定スピンモーメントspecx.f等価回路モデル円周率パラメータ・モデルヒストグラム不規則局所モーメントTS-112TS-110直流解析PCExcelシンボルGimp日本語最小二乗法フラクタルマンデルブロ集合縮退クーロン散乱三次元ゼーベック係数キーボード入出力関数フィッティング文字列疎行列Realforceトラックボール線種EAGLE連立一次方程式MBECrank-Nicolson法AACircuit負帰還安定性ナイキスト線図マテリアルデザインP-10化学反応ifort境界条件陰解法熱拡散方程式MAS830LCK1026グラフの分割軸ラベル凡例片対数グラフトランスHiLAPW両対数グラフLMC662PIC16F785ヒストグラム確率論

最新コメント
リンク

にほんブログ村 その他趣味ブログ 電子工作へ