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