アットウィキロゴ

潜在p

package delta;
 
import tool.*;
 
public class pro {
 
     int s,datanumber;
    String[] data=new String[5000];
    double[] y=new double[5000];
   double[] p=new double[5000];
 
    double[] dp=new double[5000];
 
      double[] k=new double[5000];
 
      double[] sol=new double[500];
      double alpha,beta;
 
       double[][] x=new double[500][10];
 
       double sig1,avg1,sig2,avg2;
 
    public static void main(String[] args) {
        pro te=new pro();
    }
    pro(){
 
 
        catchdata sub2=new catchdata();
        sub2.makedata();
        p=sub2.p;
        y=sub2.y;
        datanumber=sub2.datanumber;
 
 
        datanumber=datanumber-2;
 
        k[1]=100;
        dp[1]=0;
       for(s=2;s<datanumber+1;s++){
       dp[s]=p[s]-p[s-1];
       k[s]=100;   
       }
 
 
       int tr;
 
       for(tr=1;tr<6;tr++){
 
 for(s=1;s<datanumber+1;s++){
 x[s][1]=1;
 x[s][2]=y[s]-k[s];
 }
 
 ols sub=new ols();
 sub.datanumber=datanumber;
 sub.x=x;
 sub.y=dp;
 sub.number=2;
 sub.makedata();
 sol=sub.sol;
 
 alpha=sol[1];
 beta=sol[2];
 
 
 
    double a1=0;
 for(s=1;s<datanumber+1;s++){
 double x1=(dp[s]-alpha-beta*(y[s]-k[s]));
 a1=a1+x1;
 }
 avg1=a1/datanumber;
 
 double s1=0;
 for(s=1;s<datanumber+1;s++){
 double x1=(dp[s]-alpha-beta*(y[s]-k[s]));
 s1=s1+(x1-avg1)*(x1-avg1);
 }
 sig1=s1/datanumber;   
 
 
 double a2=0;
 for(s=2;s<datanumber+1;s++){
 double x2=y[s]-y[s-1];    
 a2=a2+x2;
 }
 avg2=a2/datanumber;
 
 
  double s2=0;
 for(s=1;s<datanumber+1;s++){
 double x2=y[s]-y[s-1];
 s2=s2+(x2-avg2)*(x2-avg2);
 }
  sig2=s2/datanumber;
 
 
 
optimal sub3=new optimal();
sub3.alpha=alpha;
sub3.beta=beta;
sub3.sig1=sig1;
sub3.sig2=sig2;
sub3.avg1=avg1;
sub3.avg2=avg2;
sub3.dp=dp;
sub3.y=y;
sub3.datanumber=datanumber;
sub3.makedata();  
k=sub3.k;        
 
       }
 
       System.out.println(alpha+","+beta);
 
for(s=1;s<datanumber+1;s++){
System.out.println(y[s]+","+k[s]);    
}        
 
 
 
 
 
 
 
 
 
 
}
 
 
 
 
}
 
 
package delta;
 
 
public class optimal {
 
    double alpha,beta;
    double sig1,sig2,avg1,avg2;
    double[] dp=new double[500];
    double[][] v=new double[300][403];
    double[] ks=new double[401];
    double[] y=new double[401];
    int number;
    int[][] gotok=new int[200][400];
    int[] op=new int[500];
 
     double[] k=new double[201];
 
 
     int datanumber;
 
    void makedata(){
 
        int s;
        for(s=1;s<400;s++){
        ks[s]=80+0.1*s;    
        }
 
 
        for(s=1;s<400;s++){
        v[1][s]=f(dp[1],y[1],ks[s]);    
 
        }
 
        int t,sx;
 
        for(t=2;t<datanumber+1;t++){
        for(s=1;s<400;s++){
        double u1=f(dp[t],y[t],ks[s]);    
        double maxv=-999999999;
        int sxs=0;
        for(sx=1;sx<400;sx++){
        double v1=u1+g(ks[s],ks[sx])+v[t-1][sx];
        if(v1>maxv)sxs=sx;
        if(v1>maxv)maxv=v1;
        }    
        gotok[t][s]=sxs;
        v[t][s]=maxv;
        }
        }
 
        double maxv=-99999;
        int sxs=0;
        for(s=1;s<400;s++){
        if(v[datanumber][s]>maxv)sxs=s;    
        if(v[datanumber][s]>maxv)maxv=v[datanumber][s];    
        }
 
 
        op[datanumber]=sxs;
        for(s=1;s<datanumber;s++){
        t=datanumber+1-s;
        sxs=op[t];
        op[t-1]=gotok[t][sxs];    
        }
 
 
        for(s=1;s<datanumber+1;s++){
        sxs=op[s];
        k[s]=ks[sxs];    
        }
 
 
 
 
 
 
    }
 
 
    double f(double p1,double yy,double k3){
 
        double x1=p1-alpha-beta*(yy-k3);
        double x2=p1-alpha-beta*(yy-k3);
 
        double f1=-(x1-avg1)*(x1-avg1)/(sig1*sig1);
 
        return f1;
    }
 
 
    double g(double k1,double k2){
 
        double x1=k1-k2;
 
        double f1=-(x1-avg2)*(x1-avg2)/(sig2*sig2);
 
        return f1;
    }
 
 
}
 
package delta;
 
public class ols {
 
    int s,s1,s2;
    int datanumber,number;
    double x1;
    double[][] a=new double[100][100];
     double[] b=new double[100];
     double[] y=new double[1000];
    double[][] x=new double[1000][10];
     double[] sol=new double[100];
 
    void makedata(){
 
 
 
     for(s1=1;s1<number+1;s1++){
    for(s2=1;s2<number+1;s2++){   
     x1=0;   
    for(s=1;s<datanumber+1;s++){
    x1=x1+x[s][s1]*x[s][s2];
    }
    a[s1][s2]=x1;
    }
    }
 
 
 
    for(s1=1;s1<number+1;s1++){
    x1=0;   
    for(s=1;s<datanumber+1;s++){
    x1=x1+x[s][s1]*y[s];
    }
    b[s1]=x1;
    }
 
    double z;
 
   for(s1=1;s1<number+1;s1++){
   for(s2=1;s2<number+1;s2++){   
   z=a[s2][s1]/a[s1][s1];  
   if(s1==s2)z=0;
   for(s=1;s<number+1;s++){
   a[s2][s]=a[s2][s]-z*a[s1][s];
   } 
   b[s2]=b[s2]-z*b[s1];
   }
   }
 
   for(s1=1;s1<number+1;s1++){
   sol[s1]=b[s1]/a[s1][s1];
   }
 
 
 
 
 
    }
}
 
 
package delta;
 
 
import tool.*;
 
public class catchdata {
 
     int s,datanumber;
    String[] data=new String[5000];
    double[] y=new double[5000];
   double[] p=new double[5000];
 
 
    void makedata(){
 
 
           readfile sub2=new readfile();
        sub2.makedata("data.csv","UTF-8");
        data=sub2.data;
        datanumber=sub2.datanumber;
 
 
        for(s=2;s<datanumber+1;s++){
       String[] x=data[s].split(",");
       y[s-1]=Double.parseDouble(x[2]);     
        }
        datanumber=datanumber-1;
 
 
 
 
        readfile sub3=new readfile();
        sub3.makedata("datax.csv","UTF-8");
        data=sub3.data;
        datanumber=sub3.datanumber;
 
 
        for(s=2;s<datanumber+1;s++){
       String[] x=data[s].split(",");
       p[s-1]=Double.parseDouble(x[2]);     
        }
        datanumber=datanumber-1;
 
 
 
 
 
 
 
 
 
 
    }
 
 
 
 
}
 
最終更新:2016年04月01日 02:47