JAVAによる統計学入門 08 シンプソンの公式 02
up 2022 06 15 (Fri)
08 シンプソンの公式 02 正規密度関数の積分
07 シンプソンの公式 01 y = x で面積の算出
06 中心極限定理 02 標準化 1標準偏差、 2標準偏差、 3標準偏差の個数計算、
05 中心極限定理 01 一様乱数、N個のサンプルの平均の分布
04 正規分布 01 確率密度関数、標準正規分布
03 誕生日問題 02 シミュレーションによる確認、ソート
02 誕生日問題 01 階乗、
01 二項分布 : 組み合わせ、nCr = n! / (r! * (n-r)!)
【正規確率密度関数の積分】
シンプソンの公式つ使って、確率密度関数の積分を近似する。
// a から b の範囲の面積 = h/3 {y0 + y2n + 4 (y1 + y3 + ... + y2n-1) + 2(y2 + y4 + ... + y2n-2)}
// 平均 10.0 標準偏差 5.0 の正規分布を a から bまで積分する。
// a = 15.0, b = 25.0; m = 10.0; s = 5.0; n = 100;
// h = (b-a)/(2n)
//
public class s01 { // (Simpson's rule)
public static void main(String args[]){
SR01 sr = new SR01();
sr.start();
}
}
class SR01{
double a = 15.0;
double b = 25.0;
double m = 10.0;
double s = 5.0;
int n = 100;
double za = (a-m)/s;
double zb = (b-m)/s;
double h = (zb - za) /(n*2);
void start(){
double total = 0;
double t01 = func(za) + func(zb);
System.out.println(" a = " + a + " b = " + b + " m = " + m + " s = " + s);
System.out.println(" za = " + za + " func(za) = " + func(za) + " zb = " + zb + " func(zb) " + func(zb) + " h = " + h);
System.out.println(" t01 = " + t01);
double t02 = 0;
double t03 = 0;
double x = za + h; // (y1 + y3 + ... + y2n-1)
System.out.println();
for(int i = 1; i<= n*2 -1; i+=2){
t02 += func(x);
System.out.println(" x = " + x + " func(x) = " + func(x) + " t02 = " + t02);
x += h * 2;
}
System.out.println();
System.out.println("t02 = " + t02);
x = za + h * 2;
System.out.println();
for(int i = 2; i<= n*2 - 2; i+=2){ // (y2 + y4 + ... + y2n-2)
t03 += func(x);
System.out.println(" x = " + x + " func(x) = " + func(x) + " t03 = " + t03);
x += h * 2;
}
System.out.println("t03 = " + t03);
total = t01 + t02*4 + t03 * 2;
total = total * h / 3;
System.out.println("total = " + total);
}
// 1/root(2 * PI) * E ** (-x+x)/(2)
double func(double x){ // y = x
return 1/Math.sqrt(Math.PI *2) * Math.pow(Math.E, -x*x/2);
}
}
/* デバッグのために挿入した System.out.print(...)の値
h = 0.5
t01 = 6.0
x = 0.5 func(x) = 0.5 t02 = 0.5
x = 1.5 func(x) = 1.5 t02 = 2.0
x = 2.5 func(x) = 2.5 t02 = 4.5
x = 3.5 func(x) = 3.5 t02 = 8.0
x = 4.5 func(x) = 4.5 t02 = 12.5
x = 5.5 func(x) = 5.5 t02 = 18.0
t02 = 18.0
x = 1.0 func(x) = 1.0 t03 = 1.0
x = 2.0 func(x) = 2.0 t03 = 3.0
x = 3.0 func(x) = 3.0 t03 = 6.0
x = 4.0 func(x) = 4.0 t03 = 10.0
x = 5.0 func(x) = 5.0 t03 = 15.0
t03 = 15.0
total = 18.0
*/