/* S0430.java * ポアソン乱数の発生 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.awt.event.*; import window.Window; public class S0430 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 = 10000; int SIZE = 20; /* ヒストグラムの大きさ */ int j; /* forのカウンタ */ int k; /* 本文kの説明参照 */ int f[] = new int [SIZE]; /* kの頻度 */ double lambda = 1; /* λ */ /* グラフィックの準備 */ int SPACE = 40; int HIGHT = 400; int WIDTH = 640; w.setWindow(0, 0.0,0.0,SIZE,0.5, SPACE,HIGHT-SPACE,WIDTH-SPACE,SPACE); w.axis(0, "k", 1, "f[k] / NUMBER", 0.1,g); /*メイン*/ for (j = 0; j < NUMBER; j++) { k = poisson(lambda); f[k] = f[k] + 1; } /* ヒストグラムを書く */ g.setColor(Color.red); for (k = 0; k < SIZE; k ++) { w.line(0, k + 0.5, 0, k + 0.5, (double)f[k] / NUMBER, g); } } int poisson(double lambda) { double xp; int k = 0; xp = Math.random(); while (xp >= Math.exp(-lambda)) { xp = xp * Math.random(); k = k + 1; } return (k); } }