/* S0310.java * ベルヌーイ試行のシミュレーション * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.text.*; public class S0310 extends Applet{ public void paint(Graphics g) { int M = 1000000; /*発生させる乱数の数*/ int j; /* forのカウンタ */ int k; /* 表の出た回数 */ int n = 6; /* コイン投げの回数 */ int b[] = new int [20]; /* 度数 */ double p = 0.5; /* 表の出る確率 */ double binom; /* 理論値 */ DecimalFormat exFormat1 = new DecimalFormat(" 0.000000"); for (j = 1; j <= M; j ++) { k = bernoulli(p, n); b[k] = b[k] + 1; } g.drawString(" k simulation theory", 10, 10); for (k = 0; k <= n; k ++) { binom = (double) b[k] / M; g.drawString(" " + k, 10 , 20 + 10 * k); g.drawString(" " + exFormat1.format(binom), 40 , 20 + 10 * k); g.drawString(" " + exFormat1.format(binomial(p, n, k)), 120 , 20 + 10 * k); } } public static int bernoulli(double p, int n){ int k, i; k = 0; for (i = 1; i <= n; i++) { if (p > Math.random()) { k = k + 1; } } return (k); } public static double binomial(double p, int n, int k){ int i; int k1 = 1; int n1 = 1; double b; for (i = 1; i <= k; i ++) { k1 = k1 * i; } for (i = n - k + 1; i <= n; i++) { n1 = n1 * i; } b = (double)n1 / k1 * Math.pow(p,(double)k) * Math.pow((1 - p), (double)(n - k)); return (b); } }