package bs;
public class optimal {
double[] beta=new double[11];
double alpha;
int datanumber;
int number;
double[] y=new double[500];
double[][] x=new double[500][4];
double[] betas=new double[11];
double[] d_beta=new double[11];
double d_alpha;
double[] vec_beta=new double[11];
double vec_alpha;
int s;
void makedata(){
int mode=0;
while(mode<50){
ex sub=new ex();
sub.x=x;
sub.y=y;
sub.alpha=alpha;
sub.beta=beta;
sub.number=number;
sub.datanumber=datanumber;
double u1=sub.makedata();
double h=0.01;
for(s=1;s<number+1;s++){
int sx;
for(sx=1;sx<number+1;sx++){
betas[sx]=beta[sx];
}
betas[s]=beta[s]+h;
ex sub2=new ex();
sub2.x=x;
sub2.y=y;
sub2.alpha=alpha;
sub2.beta=betas;
sub2.number=number;
sub2.datanumber=datanumber;
double u2=sub2.makedata();
d_beta[s]=(u2-u1)/h;
}
ex sub3=new ex();
sub3.x=x;
sub3.y=y;
sub3.alpha=alpha+h;
sub3.beta=betas;
sub3.number=number;
sub3.datanumber=datanumber;
double u3=sub3.makedata();
d_alpha=(u3-u1)/h;
double du=d_alpha*d_alpha;
for(s=1;s<number+1;s++){
du=du+d_beta[s]*d_beta[s];
}
double delta=u1/(100*du);
if(delta>5)mode=1000;
for(s=1;s<number+1;s++){
vec_beta[s]=beta[s]-d_beta[s]*delta;
}
vec_alpha=alpha-d_alpha*delta;
ex sub7=new ex();
sub7.x=x;
sub7.y=y;
sub7.alpha=vec_alpha;
sub7.beta=vec_beta;
sub7.number=number;
sub7.datanumber=datanumber;
double u7=sub7.makedata();
if(u1>u7){
for(s=1;s<number+1;s++){
beta[s]=vec_beta[s];
}
alpha=vec_alpha;
}
if(u7>u1)mode=1000;
if(u1==u7)mode=1000;
mode=mode+1;
}
}
}
最終更新:2016年12月07日 20:23