アットウィキロゴ

変分 乱数9

package p5;
 
 
public class pro {
 
int number;
  double[] mu=new double[11];
  double[] sig=new double[11];
 double[] mux=new double[11];
  double[] sigx=new double[11];
  double[] p=new double[11];
 
   double[] y1=new double[10001];
   double[] y2=new double[10001];
   double[] y3=new double[10001];
   double[] y4=new double[10001];
 
    public static void main(String[] args) {
        pro y=new pro();
    }
    pro(){
 
        number=10;
 
        int s;
 
        for(s=1;s<number+1;s++){
        mu[s]=100*s;
        sig[s]=100;
        mux[s]=100*s;
        sigx[s]=100;
        p[s]=0.1;
        }
 
 
        for(s=1;s<10001;s++){
        int sx=randx();    
      y1[s]=sample(mu[sx],sig[sx]);
      y2[s]=sample(mux[sx],sigx[sx]);
      }  
 
       System.out.println(y1[1]+","+y2[1]);  
 
      double tr1=300;
      double tr2=350;
      int sx=0;
       for(s=1;s<10001;s++){
       int h=0;
       if(y1[s]>tr1)h=h+1;
       if(y1[s]<tr2)h=h+1;
       if(h==2)sx=sx+1;
       if(h==2)y3[sx]=y2[s];
       }  
 
       System.out.println(sx);
 
       int de=sx;
       double a1=0;
       for(s=1;s<de+1;s++){
       a1=a1+y3[s];    
       }
       a1=a1/de;
 
       System.out.println(a1);
 
       double s1=0;
       for(s=1;s<de+1;s++){
       s1=s1+(y3[s]-a1)*(y3[s]-a1);    
       }
       s1=Math.sqrt(s1/de);
 
       System.out.println(s1);
 
       int delta=112;
 
      for(s=1;s<10001;s++){
      double pc=0;
      for(sx=1;sx<delta+1;sx++){   
      pc=pc+sample(a1,s1);
      }  
    y4[s]=pc/delta;
 
      }
 
     double a2=0;
       for(s=1;s<10001;s++){
       a2=a2+y4[s];    
       }
       a2=a2/10000;
 
       System.out.println(a1);
 
       double s2=0;
       for(s=1;s<10001;s++){
       s2=s2+(y4[s]-a2)*(y4[s]-a2);    
       }
       s2=Math.sqrt(s2/10000);
 
       System.out.println(a2+","+s2);  
 
 
 
 
    }
 
    double sample(double mumu,double sigsig) {
 
 
 
 
  double pi = Math.PI;
 
  double p1 = 0;
  double p2 = 0;
 
 
  double x1=Math.random();
  double x2=Math.random();
 
  double f1=Math.log(x1);
  double r=Math.sqrt(-2*f1)*Math.cos(2 * pi * x2);
 
  double z=mumu+sigsig*r;
 
 
 return z;
 
}
 
 
 
    int randx(){
 
 
    int s;
    double[] px=new double[100];
    px[1]=p[1];
    for(s=2;s<number+1;s++){
    px[s]=px[s-1]+p[s];
    }
 
    double m1=Math.random();
    int nn=1;
    for(s=1;s<number;s++){
    if(m1>px[s])nn=s;
    }
 
 
 
    return nn;
}  
 
 
 
 
}
 
最終更新:2016年12月20日 10:18