/* A0310.java 3章1.解答 * 指数分布のシミュレーションの検定 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.text.*; public class A0310 extends Applet{ public void paint(Graphics g) { double T_END = 1000.0; /* シミュレーション終了時刻 */ double T_DISP = 20.0; /* 事象表示時刻 */ int TAU_MAX = 10; /* τの最大値 */ long j; /* 事象発生の回数 */ int f[] = new int[TAU_MAX + 1]; /* ヒストグラム */ int u; /* τの整数部分 */ double f0; /* 理論度数 */ double lambda = 1; /* λ */ double dt = 0.01; /* 微小時間 */ double t0 = 0.0; /* 一つ前の事象が発生した時刻 */ double t = 0.0; /* 現在の時刻 */ double tau = 0.0; /* 事象発生の間隔τ */ double xs = 0.0; /* カイ自乗値 */ DecimalFormat exFormat1 = new DecimalFormat(" #.000"); /* メイン */ j = 0; while (t <= T_END) { if ((lambda * dt) > Math.random()) { tau = t - t0; u = (int)tau; if (u <= TAU_MAX) { f[u] = f[u] + 1;} t0 = t; j = j + 1; } t = t + dt; } /* 検定 */ g.drawString(" k simulation theory", 10, 10); for (u = 0; u < TAU_MAX ; u ++) { f0 = exponent(lambda, (u + 0.5))* lambda * T_END; /* 理論度数 */ g.drawString(" " + u, 10 , 20 + 10 * u); g.drawString(" " + f[u], 50 , 20 + 10 * u); g.drawString(exFormat1.format(f0), 140 , 20 + 10 * u); xs = xs + ((double)f[u] - f0) * ((double)f[u]- f0) / f0; } g.drawString(" xs = " + exFormat1.format(xs), 10, 30 + 10 * u); } public double exponent(double lambda, double tau) { return(lambda * Math.exp(-lambda * tau)); } }