アットウィキロゴ

utll

package vb;
 
import tool.*;
 
public class pro {
 
    int[] point=new int[31];
   int s,number,datanumber;
   double mu,sig;
   double[] p=new double[31];
 
   double[] delta=new double[50001];
   String[] data=new String[600];
 
    public static void main(String[] args) {
        pro t=new pro();
    }
 
    pro(){
 
 
 
 
         readfile sub2=new readfile();
        sub2.makedata("data.csv","UTF-8");
        data=sub2.data;
        datanumber=sub2.datanumber;     
 
        for(s=2;s<datanumber+1;s++){
        data[s]=rev_csv(data[s]);
        String[] x=data[s].split(",");
        point[s-1]=num_int(x[1]);
        }
 
 
 
 
 
 
 
 
 
        number=20;
 
 
 
 
 
        int p2=0;
         for(s=1;s<number+1;s++){
        p2=p2+point[s];
        }
 
        datanumber=p2;
 
        mu=7;
        sig=8;
 
        int mode=0;
        while(mode<1000){
 
        for(s=1;s<number+1;s++){
        p[s]=f(s,mu,sig);
        }
 
        double p1=0;
        for(s=1;s<number+1;s++){
        p1=p1+p[s]; 
        }
 
 
        for(s=1;s<number+1;s++){
        p[s]=p[s]/p1;
        }
 
 
        double e1=0;
        for(s=1;s<number+1;s++){
        e1=e1+(point[s]-datanumber*p[s])*(point[s]-datanumber*p[s])/p[s];    
        }
 
 
      double h=0.1;
 
 
        for(s=1;s<number+1;s++){
        p[s]=f(s,mu+h,sig);
        }
 
        p1=0;
        for(s=1;s<number+1;s++){
        p1=p1+p[s]; 
        }
 
 
        for(s=1;s<number+1;s++){
        p[s]=p[s]/p1;
        }
 
 
        double e2=0;
        for(s=1;s<number+1;s++){
        e2=e2+(point[s]-datanumber*p[s])*(point[s]-datanumber*p[s])/p[s];    
        }
 
 
 
        for(s=1;s<number+1;s++){
        p[s]=f(s,mu,sig+h);
        }
 
        p1=0;
        for(s=1;s<number+1;s++){
        p1=p1+p[s]; 
        }
 
 
        for(s=1;s<number+1;s++){
        p[s]=p[s]/p1;
        }
 
 
        double e3=0;
        for(s=1;s<number+1;s++){
        e3=e3+(point[s]-datanumber*p[s])*(point[s]-datanumber*p[s])/p[s];    
        }
 
 
        double du=-0.01*e1;
 
        double dmu=(e2-e1)/h;
 
         double dsig=(e3-e1)/h;
 
        double t=du/(dmu*dmu+dsig*dsig);
 
 
 
 
 
 
 
        for(s=1;s<number+1;s++){
        p[s]=f(s,mu+dmu*t,sig+dsig*t);
        }
 
        p1=0;
        for(s=1;s<number+1;s++){
        p1=p1+p[s]; 
        }
 
 
        for(s=1;s<number+1;s++){
        p[s]=p[s]/p1;
        }
 
 
        double e4=0;
        for(s=1;s<number+1;s++){
        e4=e4+(point[s]-datanumber*p[s])*(point[s]-datanumber*p[s])/p[s];    
        }
 
 
 
if(e4<e1){
mu=mu+dmu*t;
sig=sig+dsig*t;   
}        
        if(e1<e4)mode=10000;
 
        mode=mode+1;        
        } 
 
      System.out.println(mu+","+sig);    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    }
 
 
       int num_int(String str){
 
    int nx;
 
    nx=0;
 
 try{
 
    nx=Integer.parseInt(str);
 
 }catch (Exception e) {}
 
 return nx;
 
 
 
}    
 
    String rev_csv(String str){
 
        String str5=str;
        int px=str5.indexOf("\"");
 
 
 
        while(px>-1){
       str5=rev(str5);
       px=str5.indexOf("\"");   
        }
        return str5;
    }
 
    String rev(String str){
 
        int p1=str.indexOf("\"");
        int p2=str.indexOf("\"",p1+1);
 
     String str1=str.substring(0,p1);   
        String str2=str.substring(p1+1,p2);  
        String str3=str.substring(p2+1,str.length());
        str2=str2.replace(",","");
 
        return str1+str2+str3;
 
    }
 
 
 
    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;
}  
 
 
 
 
 
 
       double f(double x,double mu,double sig){
double pi,f1,f2;
 
        pi=Math.PI;
 
        f2=Math.sqrt(2*pi*sig*sig);
        f1=-(x-mu)*(x-mu)/(2*sig*sig);
 
        return Math.exp(f1)/f2;
}
 
}
 
最終更新:2016年12月12日 13:08