/* A0430.java 4章3.の解答 * 正規分布乱数の発生 * (C) H.Ishikawa 2008 */ package simulation; import java.applet.*; import java.awt.*; import java.awt.event.*; import window.Window; public class A0430 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 f[] = new int [SIZE]; /* ヒストグラム */ int j; /* forのカウンタ */ int u; /* キザミの番号 */ double ex = 10; /* 平均値 */ double sd = 2; /* 標準偏差 */ /* グラフィックの準備 */ int SPACE = 40; int HIGHT = 400; int WIDTH = 640; w.setWindow(0, 0.0,0.0,20.0,0.2, SPACE,HIGHT-SPACE,WIDTH-SPACE,SPACE); w.axis(0, "", 5, "", 0.05,g); /* メイン */ for (j = 0; j < NUMBER; j++) { u = (int)(normal1(ex, sd)); if (u >= 0 || u < SIZE) {f[u] = f[u] + 1;} } /* ヒストグラムを書く */ g.setColor(Color.red); for (u = 0; u < SIZE; u ++) { w.line(0, u + 0.5, 0, u + 0.5, (double)f[u] / NUMBER, g); } } double normal1(double ex, double sd) { double xw ; double x; xw = Math.sqrt(-2.0 * Math.log(Math.random())) * Math.cos(2.0 * Math.PI * Math.random()); x = sd * xw + ex; return (x); } }