アットウィキロゴ

ゆだ

package network;
 
 
 
public class pro {
 
    int datanumber,number;
    double[] beta=new double[11];
    double alpha;
    double[][] x=new double[101][11]; 
     double[] y=new double[101]; 
 
      double[] d_beta=new double[11];
      double d_alpha;
        double[] v_beta=new double[11];
       double v_alpha;
 
    public static void main(String[] args) {
        pro test=new pro();
    }
 
    pro(){
 
        datanumber=100;
 
        number=2;
        int s;
 
        for(s=1;s<51;s++){
        x[s][1]=4;
        x[s][2]=5;
        y[s]=1;
        }
 
        for(s=51;s<101;s++){
        x[s][1]=-4;
        x[s][2]=-5;
        y[s]=-1;
        }
 
        beta[1]=3;
        beta[2]=1;
        alpha=2;
 
 
 
      ex sub=new ex();
 sub.x=x;
sub.y=y;
sub.datanumber=datanumber;
sub.number=number;
        sub.beta=beta;
        sub.alpha=alpha;
       sub.makedata();
        beta=sub.beta;
        alpha=sub.alpha;
 
        System.out.println(alpha);
          System.out.println(beta[1]);
          System.out.println(beta[2]);
 
 
 
        }}
 
 
 
package network;
 
 
 
public class dist{
 
    int datanumber,number;
    double[] beta=new double[11];
    double alpha;
    double[][] x=new double[101][11]; 
     double[] y=new double[101]; 
 
 
 
    double makedata(){
 
 
   int n;
          double z;
          z=0;
          for(n=1;n<datanumber+1;n++){
          double d1=dist(n);
          double h=y[n];
          h=h*sign(n);
          if(h>0)z=z+dist(n);    
          if(h<0)z=z-dist(n);    
          }
 
 
 
 
        return z;
 
    }
 
 
 
 
 
    double dist(int n){
 
int s;
double z,k,zz,t,e;
double[] xs=new double[100];
 
z=0;
for(s=1;s<number+1;s++){
z=z+beta[s]*x[n][s];
}
k=alpha+z;
 
 
zz=0;
for(s=1;s<number+1;s++){
zz=zz+beta[s]*beta[s];
}
 
t=-k/zz;
 
for(s=1;s<number+1;s++){
xs[s]=x[n][s]+t*beta[s];
}
 
e=0;
for(s=1;s<number+1;s++){
e=e+(x[n][s]-xs[s])*(x[n][s]-xs[s]);
}
 
return e;
 
}
   double sign(int n){
 
int s;
 double k,z;
z=0;
for(s=1;s<number+1;s++){
z=z+beta[s]*x[n][s];
}
k=z+alpha;
 
int sig=1;
if(k<0)sig=-1;
 
 
return sig;
 
} 
}
 
package network;
 
 
 
public class ex{
 
    int datanumber,number;
    double[] beta=new double[11];
    double alpha;
    double[][] x=new double[101][11]; 
     double[] y=new double[101]; 
 
      double[] d_beta=new double[11];
      double d_alpha;
        double[] v_beta=new double[11];
       double v_alpha;
 
 
 
    void makedata(){
 
        int s;
 
        int mode=0;
        while(mode<100){
 
 
      for(s=1;s<number+1;s++){
      d_beta[s]=drive_beta(s);    
      }
 
      d_alpha=drive_alpha();
      double z=d_alpha*d_alpha;
      for(s=1;s<number+1;s++){
      z=z+d_beta[s]*d_beta[s];    
      }
 
      z=Math.sqrt(z);
 
      for(s=1;s<number+1;s++){
      v_beta[s]=d_beta[s]/z;    
      }
      v_alpha=d_alpha/z; 
 
      double du=v_alpha*d_alpha;
      for(s=1;s<number+1;s++){
      du=du+v_beta[s]*d_beta[s];    
      }
 
      dist sub=new dist();
 sub.x=x;
sub.y=y;
sub.datanumber=datanumber;
sub.number=number;
        sub.beta=beta;
        sub.alpha=alpha;
        double u1=sub.makedata();
 
        double delta=(u1/(du*100));
 
 
 
       double[] betas=new double[11];
    double alphas;
 
    for(s=1;s<number+1;s++){
      betas[s]=beta[s]+delta*v_beta[s];    
      }
 
     alphas=alpha+delta*v_alpha;   
 
 
         dist sub6=new dist();
 sub6.x=x;
sub6.y=y;
sub6.datanumber=datanumber;
sub6.number=number;
        sub6.beta=betas;
        sub6.alpha=alphas;
        double u2=sub6.makedata();
 
        if(u1>u2)mode=1000;
 
        if(u2>u1){
 
            alpha=alphas;
         for(s=1;s<number+1;s++){
      beta[s]=betas[s];    
      }
 
        }
 
  mode=mode+1;     
 
        }
 
    }
double drive_beta(int ds){
 
double h;
 int s;
 dist sub2=new dist();
 sub2.x=x;
sub2.y=y;
sub2.datanumber=datanumber;
sub2.number=number;
        sub2.beta=beta;
        sub2.alpha=alpha;
        double d1=sub2.makedata();
 
h=0.01;
 
 double[] beta_d=new double[11];
 
for(s=1;s<number+1;s++){
beta_d[s]=beta[s];
}
 
beta_d[ds]=beta_d[ds]+h;
 
dist sub3=new dist();
sub3.x=x;
sub3.y=y;
sub3.datanumber=datanumber;
sub3.number=number;
sub3.beta=beta_d;
sub3.alpha=alpha;
double d2=sub3.makedata();
 
 
return (d2-d1)/h;
 
}
 
double drive_alpha(){
 
double h;
 int s;
 dist sub2=new dist();
 sub2.x=x;
sub2.y=y;
sub2.datanumber=datanumber;
sub2.number=number;
        sub2.beta=beta;
        sub2.alpha=alpha;
        double d1=sub2.makedata();
 
h=0.01;
 
 
dist sub3=new dist();
sub3.x=x;
sub3.y=y;
sub3.datanumber=datanumber;
sub3.number=number;
sub3.beta=beta;
sub3.alpha=alpha+h;
double d2=sub3.makedata();
 
 
return (d2-d1)/h;
 
}
 
 
}
 
最終更新:2016年12月03日 02:09