/* S0440.java * アーラン乱数の発生 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.awt.event.*; import window.Window; public class S0440 extends Applet implements ActionListener { Button button0; public void init() { button0 = new Button(" 再実行 "); add(button0); button0.addActionListener(this); } public void actionPerformed(ActionEvent e) { String label = e.getActionCommand(); repaint(); } public void paint(Graphics g){ Window w ; w = new Window(); int NUMBER = 1000; int SIZE = 20; /* ヒストグラムの大きさ */ double KIZAMI = 0.2; /* 0.2ずつに区切ってヒストグラムへ */ int j; /* forのカウンタ */ int u; /* キザミの番号 */ int i; /* forのカウンタ */ int f[] = new int[SIZE]; /* 頻度 */ int k = 1; /* 位相 k=1,2,4,8,16 */ double lambda = 1; /* λ */ /* グラフィックの準備 */ int SPACE = 40; int HIGHT = 640; int WIDTH = 640; w.setWindow(0, 0.0,0.0,4.001,0.4,SPACE,HIGHT/5-SPACE,WIDTH-SPACE,0); w.axis(0, "", 0.2, "k = 1", 0.1,g); w.setWindow(1, 0.0,0.0,4.001,0.4,SPACE,2*HIGHT/5-SPACE,WIDTH-SPACE,HIGHT/5); w.axis(1, "", 0.2, "k = 2", 0.1, g); w.setWindow(2, 0.0,0.0,4.001,0.4,SPACE,3*HIGHT/5-SPACE,WIDTH-SPACE,2*HIGHT/5); w.axis(2, "", 0.2, "k = 4", 0.1,g); w.setWindow(3, 0.0,0.0,4.001,0.4,SPACE,4*HIGHT/5-SPACE,WIDTH-SPACE,3*HIGHT/5); w.axis(3, "", 0.2, "k = 8", 0.1,g); w.setWindow(4, 0.0,0.0,4.001,0.4,SPACE,HIGHT-SPACE,WIDTH-SPACE,4*HIGHT/5); w.axis(4, "", 0.2, "k = 16", 0.1,g); /* メイン */ for (i = 0; i < 5; i ++) { for (j = 0; j < NUMBER; j++) { u = (int)(erlang(lambda, k) / KIZAMI); if (u < SIZE) {f[u] = f[u] + 1;} } /* ヒストグラムを書く */ g.setColor(Color.red); for (u = 0; u < SIZE; u ++) { w.line(i, (u+0.5) * KIZAMI, 0, (u+0.5) * KIZAMI, (double)f[u] / NUMBER, g); f[u] = 0; } k = k * 2; /* 2倍のkの値で続ける */ } } double erlang(double lambda, int k){ double tp = 1.0; double tau; int n; for (n = 1; n <= k; n ++) { tp = tp * (1 - Math.random()); } tau = -1.0 / lambda / (double)k * Math.log(tp); return (tau); } }