import java.awt.*; import java.awt.event.*; import java.text.DecimalFormat; import java.applet.Applet; import javax.swing.JLabel; import javax.swing.JTextField; public class Metropolis extends Applet implements ActionListener{ // variable set private static final long serialVersionUID = 8565245775496766530L; public static double exp = 1.0; public static double var = 1.0; public static double ratio = 10.0; public static double u, d3, d4, d7, d8, d9, d10, d11, d12; public static double[] s1 = new double[10000]; public static double[] s2 = new double[10000]; public static double[] s3 = new double[1000]; public static double[] s4 = new double[1000]; public static double[] se1 = new double[10000]; public static double[] se2 = new double[10000]; public static double[] d1 = new double[10000]; public static double[] d2 = new double[10000]; public static double[] d5 = new double[10000]; public static double[] d6 = new double[10000]; JTextField yx = new JTextField("1.0"); JTextField yn = new JTextField("1.0"); JTextField yr = new JTextField("10.0"); JLabel label1 = new JLabel("The Metropolis Sampler Frequency Distribution", JLabel.CENTER); JLabel label2 = new JLabel("
The Expectation of σ2 (0<E(σ2)≤108)",JLabel.CENTER); JLabel label3 = new JLabel("The Variance of σ2 (0<Var(σ2)≤108)",JLabel.CENTER); JLabel label4 = new JLabel("The Ratio of σ2 to Var(μj) (0<r≤108)", JLabel.CENTER); public void init(){ label1.setPreferredSize(new Dimension(416,24)); label1.setFont(new Font("Serif",Font.BOLD,14)); add(label1); label2.setPreferredSize(new Dimension(260,23)); label2.setFont(new Font("Serif",Font.BOLD,11)); add(label2); yx.setPreferredSize(new Dimension(80,23)); add(yx); label3.setPreferredSize(new Dimension(260,23)); label3.setFont(new Font("Serif",Font.BOLD,11)); add(label3); yn.setPreferredSize(new Dimension(80,23)); add(yn); label4.setPreferredSize(new Dimension(260,23)); label4.setFont(new Font("Serif",Font.BOLD,11)); add(label4); yr.setPreferredSize(new Dimension(80,23)); add(yr); yx.addActionListener(this); yn.addActionListener(this); yr.addActionListener(this); } public void actionPerformed(ActionEvent e){ if(e.getSource()==yx){ exp=Double.valueOf(yx.getText()).doubleValue(); if(exp <= 0 || exp > Math.pow(10.0,8)){ exp = 1.0; } } if(e.getSource()==yn){ var = Double.valueOf(yn.getText()).doubleValue(); if(var <= 0 || var > Math.pow(10.0,8)){ var = 1.0; } } if(e.getSource()==yr){ratio = Double.valueOf(yr.getText()).doubleValue(); if(ratio <= 0 || ratio > Math.pow(10.0,8)){ratio = 10.0;} } yx.setText(""+exp); yn.setText(""+var); yr.setText(""+ratio); repaint(); } public void paint(Graphics g){ double z1,z2,ss1,ss2; s1[0] = 0.0; s2[0] = 1.0; z1=function(s1[0],s2[0]); for(int i=0;i<9999;i++){ se1[i]=normal.sampleNormal(0,0.5); se2[i]=normal.sampleNormal(0,0.002); ss1=s1[i]+se1[i]; ss2=s2[i]+se2[i]; z2=function(ss1,ss2); if(z2/z1>=1){ s1[i+1]=ss1; s2[i+1]=ss2; z1=z2; } else if(z2/z1>=normal.sampleNormal(0,1)){ s1[i+1]=ss1; s2[i+1]=ss2; z1=z2; } else { s1[i+1]=s1[i]; s2[i+1]=s2[i]; } } d1[5000]=s1[5000]; d2[5000]=s2[5000]; for(int i=5001;i<10000;i++){ d1[i]=d1[i-1]+s1[i]; d2[i]=d2[i-1]+s2[i]; } d3=d1[9999]/5000; d4=d2[9999]/5000; d5[4999]=0; d6[4999]=0; for(int i=5000;i<10000;i++){ d5[i]=Math.pow((s1[i]-d3),2)+d5[i-1]; d6[i]=Math.pow((s2[i]-d4),2)+d6[i-1]; } d7=d5[9999]/(5000-1); d8=d6[9999]/(5000-1); // variable set int[] xxxx = new int[1000]; int[] yyyy = new int[1000]; int[] xxxx1 = new int[1000]; int[] yyyy1 = new int[1000]; double minss1 = s1[5000]; double maxss1 = s1[5000]; double minss2 = s2[5000]; double maxss2 = s2[5000]; for(int i=5000;i<10000;i++){ if(s1[i]>maxss1){ maxss1 = s1[i]; } } for(int i=5000;i<10000;i++){ if(s1[i]