アットウィキロゴ

2次元

package var;
import tool.*;
 
public class pro {
 
    int[] point=new int[31];
      int[] pointx=new int[31];
    String[] data=new String[500];
   int s,number,datanumber;
   double[] mu=new double[11];
  double[] sig=new double[11];
  double[] p=new double[11];
 
  double[] muxs=new double[11];
  double[] sigxs=new double[11];
    double[] mux=new double[11];
  double[] sigx=new double[11];
 
 
  double[] mus=new double[11];
  double[] sigs=new double[11];
  double[] ps=new double[11];
 
  double[] dmu=new double[11];
  double[] dsig=new double[11];
 
  double[] dmux=new double[11];
  double[] dsigx=new double[11];
 
    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]);
        pointx[s-1]=num_int(x[2]);
       }
 
 
        datanumber=datanumber-1;
 
        System.out.println(datanumber);
 
        number=10;
 
 
        for(s=1;s<number+1;s++){
        mu[s]=2*s;
        sig[s]=2;
        p[s]=0.1;
        mux[s]=2*s;
        sigx[s]=2;
        }
 
      int mode=0;
        while(mode<1000){
 
        cal sub=new cal();
        sub.point=point;
        sub.pointx=pointx;
        sub.number=number;
        sub.datanumber=datanumber;
        sub.mu=mu;
        sub.sig=sig;
        sub.mux=mux;
        sub.sigx=sigx;
        sub.p=p;
        double u1=sub.makedata();
 
 
        double h=0.01;
 
        for(s=1;s<number+1;s++){
 
         int sx; 
         for(sx=1;sx<number+1;sx++){
         mus[sx]=mu[sx];    
         }   
 
 
         mus[s]=mus[s]+h;   
 
 
        cal sub3=new cal();
        sub3.point=point;
        sub3.pointx=pointx;
        sub3.number=number;
        sub3.datanumber=datanumber;
        sub3.mu=mus;
        sub3.sig=sig;
        sub3.mux=mux;
        sub3.sigx=sigx;
        sub3.p=p;
        double u3=sub3.makedata();
 
        dmu[s]=(u3-u1)/h;   
 
 
 
        }
 
 
        for(s=1;s<number+1;s++){
 
         int sx; 
         for(sx=1;sx<number+1;sx++){
         muxs[sx]=mux[sx];    
         }   
 
 
         muxs[s]=muxs[s]+h;   
 
 
        cal sub4=new cal();
        sub4.point=point;
        sub4.pointx=pointx;
        sub4.number=number;
        sub4.datanumber=datanumber;
        sub4.mu=mu;
        sub4.sig=sig;
        sub4.mux=muxs;
        sub4.sigx=sigx;
        sub4.p=p;
        double u4=sub4.makedata();
 
        dmux[s]=(u4-u1)/h;   
 
 
 
 
        }
 
       for(s=1;s<number+1;s++){
 
         int sx; 
         for(sx=1;sx<number+1;sx++){
         sigs[sx]=sig[sx];    
         }   
 
 
         sigs[s]=sigs[s]+h;   
 
 
        cal sub5=new cal();
        sub5.point=point;
        sub5.pointx=pointx;
        sub5.number=number;
        sub5.datanumber=datanumber;
        sub5.mu=mu;
        sub5.sig=sigs;
        sub5.mux=mux;
        sub5.sigx=sigx;
        sub5.p=p;
        double u5=sub5.makedata();
 
        dsig[s]=(u5-u1)/h;   
 
 
 
 
        }
 
 
 
 
        for(s=1;s<number+1;s++){
 
         int sx; 
         for(sx=1;sx<number+1;sx++){
         sigxs[sx]=sigx[sx];    
         }   
 
         sigxs[s]=sigxs[s]+h;   
 
 
        cal sub6=new cal();
        sub6.point=point;
        sub6.pointx=pointx;
        sub6.number=number;
        sub6.datanumber=datanumber;
        sub6.mu=mu;
        sub6.sig=sig;
        sub6.mux=mux;
        sub6.sigx=sigxs;
        sub6.p=p;
        double u6=sub6.makedata();
 
        dsigx[s]=(u6-u1)/h;   
 
 
 
        }
 
 
 
        double du=u1/100;
        double dz=0;
        for(s=1;s<number+1;s++){
        dz=dz+dmu[s]*dmu[s];
        dz=dz+dsig[s]*dsig[s];
        dz=dz+dmux[s]*dmux[s];
        dz=dz+dsigx[s]*dsigx[s];
        }
 
        double t=du/dz;
 
 
         for(s=1;s<number+1;s++){
         mus[s]=mu[s]+dmu[s]*t;
         sigs[s]=sig[s]+dsig[s]*t;
         muxs[s]=mux[s]+dmux[s]*t;
         sigxs[s]=sigx[s]+dsigx[s]*t;
         }   
 
 
        cal sub7=new cal();
        sub7.point=point;
        sub7.pointx=pointx;
        sub7.number=number;
        sub7.datanumber=datanumber;
        sub7.mu=mus;
        sub7.sig=sigs;
        sub7.mux=muxs;
        sub7.sigx=sigxs;
        sub7.p=p;
        double u7=sub7.makedata();
 
        mode=mode+1;
 
 
 
        if(u7>u1){
 
         for(s=1;s<number+1;s++){
         mu[s]=mu[s]+dmu[s]*t;
         sig[s]=sig[s]+dsig[s]*t;
          mux[s]=mux[s]+dmux[s]*t;
         sigx[s]=sigx[s]+dsigx[s]*t;  
          }       
        }
 
        if(u1>u7)mode=100000; 
 
 
 
        }
 
     for(s=1;s<number+1;s++){   
    System.out.println(mu[s]+","+sig[s]+","+mux[s]+","+sigx[s]);
    }
 
 
 
    }
 
       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;
 
    }
 
 
 
 
}
 
 
 
package var;
 
public class cal{
 
   int datanumber;
    int[] point=new int[50];
    double[] mux=new double[11];
  double[] sigx=new double[11];
    double[] mu=new double[11];
  double[] sig=new double[11];
  double[] p=new double[11];
  int number;
     int[] pointx=new int[50];
 
    double makedata(){
 
 
        int s,sx;
 
 
 
 
 
 
    double v1=0;
    for(s=1;s<number+1;s++){
    for(sx=1;sx<datanumber+1;sx++){
    v1=v1+p[s]*point[sx]*f(sx,mu[s],sig[s]);
    }
    }
 
      double v2=0;
    for(s=1;s<number+1;s++){
    for(sx=1;sx<datanumber+1;sx++){
    v2=v2+p[s]*pointx[sx]*f(sx,mux[s],sigx[s]);
    }
    }  
 
    v1=v1*v2;
 
    return v1;
 
 
 
 
 
 
 
    }
 
        double f(double x,double mux,double sigx){
double pi,f1,f2;
 
        pi=Math.PI;
 
        f2=Math.sqrt(2*pi*sigx*sigx);
        f1=-(x-mux)*(x-mux)/(2*sigx*sigx);
 
        return Math.exp(f1)/f2;
}
 
 
 
 
}
 
最終更新:2016年12月19日 15:07