Comments
Description
Transcript
Octave のプログラミング要素 スクリプトファイルの作成
5 S 科 環境情報学 ’05 Octave のプログラミング要素 繰り返し Octave では次の2つの構文により,繰り返し 処理(ループ)を行うことができます. • while 条件式 実行文 end[while] • for 要素指定 実行文 end[while] while ループは,C 言語とほとんど変わりませんが.for ループはベクトルを用いて要素を柔軟に指定することがで きます.典型的な例は,次のようなもので,k の値を変化 させて,その 2 乗を表示します. for k = 1:0.5:10 k**2 endfor 与える要素は等差数列でなくてもよいので, for k = [0 10 2 3 7 pi] k**2 endfor などと指定することも可能です.また,for ループを入れ子 にすることも他のプログラミング言語と同様に可能です. 例えば,2 次元行列の要素を 0 で初期化する場合には,素 直に $ emacs foo.oct ‡‡ Memo ‡‡ 行列を初期化する方法として,for ループを用いる ☞ 方法および最後の要素を初期化する方法を用いた場合の実 行時間を比較する次のスクリプトを emacs で作成し,実 行してみなさい. N = 100; M = 200; tic for n = 1:N for m = 1:M A(n,m) = 0; endfor endfor toc tic; B(N,M) = 0; toc 7 tic と toc は,その間に記述された文の実行時間を表示します. Box-Müller 変換により生成した正規乱数と,randn() ☞ により生成した正規乱数を,ヒストグラムを描いて比較す る次のスクリプトを動かしてみなさい. N = 100; M = 200; for n = 1:N for m = 1:M A(n,m) = 0; endfor endfor と記述できます.しかし,このような for ループは,要素が 増える度に行列の再定義を実行するようなもので,octave では大変手間がかかります.単に N = 100; M = 200; A(N,M) = 0; とすべきです. スクリプトファイルの作成 長いプログラムを対話的に実行すると,間違えた場合 にやり直しが大変です.そのような場合には,スクリプト ファイル(名前を foo.oct とします) を,エディターで作 成し,シェルのコマンドラインから octave に直接 $ octave -q foo.oct と実行させます. Unix 系 OS では,Emacs(イーマックス)が普及してい ますので,それを使ってください.foo.oct を作成するに は,シェルのコマンドラインから次のように起動します. 目次へ ### boxmuller-ts.oct ### axis([-5,5,0,0.25]) X = randn(50000); [X1,X2] = boxmuller(50000); c = [-5:0.5:5]; hold on hist(X,c,1); hist(X1,c,1); hist(X2,c,1); pause 7 関数ファイル(boxmuller.m)を先に作成しておきなさい. ### boxmuller.m ### function [r1,r2] = boxmuller(N) R1 = rand(N,1); R2 = rand(N,1); r1 = sqrt(-2*log(R1)).*cos(2*pi*R2); r2 = sqrt(-2*log(R1)).*sin(2*pi*R2); endfunction 6 S 科 環境情報学 ’05 3 2 つの確率変数 X, Y の平均値と分散については次の性 質があります.ここに, a, b, c は定数です. 確率分布 ある変数 X が確率変数であるとは,それがとりうる値 x と x となる確率 p が同時に定められた場合をいいます. 確率変数 X が値 x をとる確率を改めて記号 P (X = x) で 表わし,これを確率分布と呼びます.また,確率変数 X が ある値 x までをとる確率 F (x) = P (X ≤ x) を分布関数と 呼びます. サイコロの目のように確率変数が離散的な値である場合 についてはこの講義では省略して,身長や体重のように確 率変数が連続的な場合について統計学的な特性をまとめて おきましょう. 連続的な場合には,任意の a, b (a < b) に対して X が区 間 [a, b] の間にある確率は,確率密度関数f (x) の積分とし て次のように与えられます. Z P (a ≤ x ≤ b) = b f (x) dx (9) a E(aX + bY + c) = aE(X) + bE(Y ) + c (17) V (aX + b) = a2 V (X) (18) また X, Y が独立の場合には E(X · Y ) = E(X) · E(Y ) (19) V (X + Y ) = V (X) + V (Y ) (20) が成り立ちます. 3.1.1 一様分布 区間 (0, 1) の一様乱数を与える確率密度関数 f (x) は, 一様という定義より,一定値 f0 であるから, Z もちろん,確率密度関数 f (x) は Z f (x) dx = 1, f (x) ≥ 0 P (0 < x < 1) = Z 1 dx = f0 0 (10) Ω 1 dx = f0 × 1 = 1 0 すなわち f (x) = 1 (0 < x < 1) です.したがって,平均 値と分散は という性質があります.したがって連続な場合の分布関数 F (x) = P (X ≤ x) は, Z x F (x) = P (X ≤ x) = (11) f (x)dx ¸1 1 x2 = =µ 2 2 0 0 µ ¶2 Z 1 1 1 1 1 V (X) = x2 dx − = − = 2 3 4 12 0 Z E(X) = xmin · 1 x dx = と表現され,以下の基本的な性質を満たします. ‡‡ Memo ‡‡ ( i ) F (xmin ) = 0, F (xmax ) = 1 ( ii ) F (x) は単調非減少関数である (iii) 右連続である ☞ 区間 (0, 1) の一様分布の平均値と分散を求めて,理 論的な値と比較しなさい. さらに,次の関係があることも自明です. P (a < x ≤ b) = F (b) − F (a) (12) また F (x) が微分可能であれば,次の関係が成立します. f (x) = 3.1 dF (x) dx (13) 連続的な確率分布の平均値と分散 確率変数 X の定義域を Ω,その確率密度関数を f (x) と するとき,平均値 E(X) および分散 V (X) は次のように定 義されます. Z (14) µ = E(X) = xf (x) dx Ω Z (15) σ 2 = V (X) = (x − µ)2 f (x) dx ZΩ = x2 f (x) dx − µ2 (16) Ω 目次へ