<?php /****************************/ /* 一様分布の計算 */ /* coded by Y.Suganuma */ /****************************/ /****************************************/ /* 一様分布の計算(P(X = x), P(X < x)) */ /* x : データ */ /* a,b : 区間 */ /* pr : P(X = x) */ /* return : P(X < x) */ /****************************************/ function uniform($x, $a, $b, &$pr) { $f = 0.0; if ($x < $a) { $pr = 0.0; $f = 0.0; } else if ($x > $b) { $pr = 0.0; $f = 1.0; } else { $y = 1.0 / ($b - $a); $pr = $y; $f = $y * ($x - $a); } return $f; } /********/ /* main */ /********/ printf("下限(a)は? "); fscanf(STDIN, "%lf", $a); printf("上限(b)は? "); fscanf(STDIN, "%lf", $b); printf("目的とする結果は? \n"); printf(" =0 : 確率の計算( P(X = x) 及び P(X < x) の値)\n"); printf(" =1 : p%値( P(X > u) = 0.01p となるuの値) "); fscanf(STDIN, "%d", $sw); if ($sw == 0) { printf("グラフ出力?(=1: yes, =0: no) "); fscanf(STDIN, "%d", $sw); // 密度関数と分布関数の値 if ($sw == 0) { printf(" データは? "); fscanf(STDIN, "%lf", $x); $f = uniform($x, $a, $b, $pr); printf("P(X = %f) = %f, P( X < %f) = %f (区間 [%f, %f])\n", $x, $pr, $x, $f, $a, $b); } // グラフ出力 else { printf(" 密度関数のファイル名は? "); fscanf(STDIN, "%s", $file1); printf(" 分布関数のファイル名は? "); fscanf(STDIN, "%s", $file2); $out1 = fopen($file1,"wb"); $out2 = fopen($file2,"wb"); printf(" 刻み幅は? "); fscanf(STDIN, "%lf", $h); for ($x = $a; $x < $b+0.5*$h; $x += $h) { if ($x > $b-0.5*$h && $x < $b+0.5*$h) $x = $b; $f = uniform($x, $a, $b, $pr); fwrite($out1, $x." ".$pr."\n"); fwrite($out2, $x." ".$f."\n"); } } } // %値 else { printf("%の値は? "); fscanf(STDIN, "%lf", $x); $p = 0.01 * $x; $f = $b - $p * ($b - $a); printf("%f%値 = %f (区間 [%f, %f])\n", $x, $f, $a, $b); } ?>