Sample:MonteCarlo Method
プログラミング初心者にとって、一般的な文法解説はハードルが高いものです。ここでは、簡単なサンプルプログラムを通して、Pythonプログラムの書き方を体験してみましょう。
2つの数値を順に入力すると、その積(掛け算した値)が出力される・・というシンプルなプログラムです。以下のコードをコピー&ペーストして下さい。
a = input( "a = " ) b = input( "b = " ) a = int( a ) b = int( b ) c= a*b print( "a x b = ", c )
モンテカルロ法を使って π の近似値を求めるプログラム
計算機を使った数値計算手法の一つで、乱数を用いた試行を繰り返すことによって確率論的に近似的に求める解を得る手法です。名称の由来はカジノで有名なモナコ公国のモンテカルロ地区・・と言われています。
Wikimediacommons File:Montecarlo pi2.PNG
Q = π*r*r / 4 S = r*r よって、Q / S = ( π*r*r / 4 ) / ( r*r ) = π/4
π = Q / S * 4
正方形全体に降る雨粒の数:4分円の中に降る雨粒の数 ≒ S:Qとなり、雨粒の数が多くなれば、S:Q の比率に一致します。
π = 4分円の中に降る雨粒の数 / 正方形全体に降る雨粒の数 * 4というかたちで、π の近似値を求めることができます。
# モンテカルロ法による円周率の導出
以下のコードをまるごとコピー&ペーストして下さい。
# ライブラリの読み込み import math import random # 初期化 n = 1000 cnt_in = 0 cnt_out = 0 # シミュレーション for i in range(n): # 0.0 - 1.0 のランダムな「雨粒」 x = random.random() y = random.random() # 4分円の中に落ちた数をカウント r = math.sqrt(x**2 + y**2) if r <= 1.0: cnt_in += 1 else: cnt_out += 1 # 円周率の近似値 Pi = cnt_in / n * 4 # 結果の表示 print("Num:", n) print("IN:", cnt_in) print("OUT:", cnt_out) print("Pi:", Pi)
既存のライブラリプログラムを利用するための下準備です。Python には、様々な既存の機能が「ライブラリ」というかたちで用意されています。例えば、乱数を発生する機能もその一つで、みなさんがその機能を実現させるためのコードを一から書く必要はありません。
import math # 数学関数を利用する場合に読み込みます。 import random # 乱数を利用する場合に読み込みます。
変数の活用と、代入処理はプログラミングの基本です。
n = 1000
x = x +1 x += 1プログラム中にある cnt_in += 1 というのは、cnt_in という変数の値を1増やすことを意味するもので、このような処理を「カウント処理」と言います。
上記のプログラムでは if 文と for 文を利用していますが、プログラムの流れを制御するには、これに while 文 を加えた3つの文の書き方がわかっていれば、大半のことは可能になります。
判断結果(true / false)によって処理を分岐します。
if r <= 1.0: cnt_in += 1 else: cnt_out += 1
この例では、r が 1.0以下の場合は、cnt_in が1つ増え、そうでない場合は、cnt_out が一つ増えます。
一定回数処理を繰り返す場合に利用するものです。
for i in range(1000): # ここに処理内容を記述
この例では i の値が 0 から 999 まで「処理」が1000回繰り返されます。
while 文は条件が真の間処理を繰り返します。
while n < 100: # ここに処理内容を記述
この例では n の値が 100未満の場合に「処理」が繰り返されます。
range 関数は開始値から終了値(未満)までの数値を要素として持つオブジェクトで、繰り返し処理では頻繁に利用されます。
range(start, stop[, step])
Python ではインデント(字下げ)によってブロックを表現します。
Python では # 記号以降はコメントとして扱われます。プログラム上で文の機能を一時的に無効にする(コメントアウト)場合にも利用可能です。
a = 1 # comment
a = 1 # b = 2 # c = 3 d = 4