class pro{
public static void main(String args[]){
double h;
double a[][]=new double[411][811];
double th[]=new double[11];
double c[]=new double[11];
double y[]=new double[11];
double cs[]=new double[11];
double ys[]=new double[11];
double y1,y2,cps,yps;
double e;
int s,m,n,px,p1,j;
int p2[]=new int[401];
int p3[]=new int[401];
int maxn,maxm;
double maxv,minv;
double x1,x2,z;
int t1,t2,t3;
double u1,u2;
double uc,uy;
h=0.02;
for (s=1;s<11;s++){
th[s]=1+0.1*s;
y[s]=0.5*th[s];
c[s]=y[s];
}
for (m=0;m<411;m++){
for (n=0;n<811;n++){
a[m][n]=0;
}
}
for (m=1;m<401;m++){
a[m][m]=1;
}
for (m=1;m<411;m++){
a[m][m+400]=1;
}
for (m=1;m<401;m++){
a[m][0]=h;
}
for (m=401;m<410;m++){
s=m-399;
u1=Math.log(c[s])+Math.log(1-y[s]/th[s]);
u2=Math.log(c[s-1])+Math.log(1-y[s-1]/th[s]);
a[m][0]=u1-u2;
}
for (m=401;m<410;m++){
s=m-399;
for (j=1;j<11;j++){
n=40*(s-1)+j;
uc=Math.log(c[s]+10*n*h)-Math.log(c[s]);
a[m][n]=-uc/(10*h);
n=40*(s-1)+j+10;
uc=Math.log(c[s]-10*n*h)-Math.log(c[s]);
a[m][n]=-uc/(10*h);;
n=40*(s-1)+j+20;
y1=y[s]+10*h;
y2=y[s];
uy=Math.log(1-y1/th[s])-Math.log(1-y2/th[s]);
a[m][n]=-uy/(10*h);
n=40*(s-1)+j+30;
y1=y[s];
y2=y[s]-10*h;
uy=Math.log(1-y1/th[s])-Math.log(1-y2/th[s]);
a[m][n]=-uy/(10*h);
n=40*(s-2)+j;
a[m][n]=(Math.log(c[s-1]+10*h)-Math.log(c[s-1]))/(10*h);
n=40*(s-2)+j+10;
a[m][n]=(Math.log(c[s-1]-10*h)-Math.log(c[s-1]))/(10*h);
n=40*(s-2)+j+20;
y1=y[s-1];
y2=y[s-1]+10*h;
a[m][n]=(Math.log(1-y1/th[s])-Math.log(1-y2/th[s]))/(10*h);
n=40*(s-2)+j+30;
y1=y[s-1]-10*h;
y2=y[s-1];
a[m][n]=(Math.log(1-y1/th[s])-Math.log(1-y2/th[s]))/(10*h);
}
}
for (s=1;s<11;s++){
for (j=1;j<11;j++){
n=40*(s-1)+j;
a[410][n]=1;
a[410][n+10]=-1;
a[410][n+20]=-1;
a[410][n+30]=1;
}
}
for (s=1;s<11;s++){
for (j=1;j<11;j++){
n=40*(s-1)+j;
a[0][n]=(Math.log(c[s]+n*h)-Math.log(c[s]+(n-1)*h))/h;
n=40*(s-1)+j+10;
a[0][n]=(Math.log(c[s]-n*h)-Math.log(c[s]-(n-1)*h))/h;
n=40*(s-1)+j+20;
y1=y[s]+(j-1)*h;
y2=y[s]+j*h;
a[0][n]=(Math.log(1-y2/th[s])-Math.log(1-y1/th[s]))/h;
n=40*(s-1)+j+30;
y1=y[s]-(j-1)*h;
y2=y[s]-j*h;
a[0][n]=(Math.log(1-y2/th[s])-Math.log(1-y1/th[s]))/h;
}
}
maxv=0;
maxn=999;
for (n=1;n<811;n++){
if (a[0][n]>maxv)maxn=n;
if (a[0][n]>maxv)maxv=a[0][n];
}
System.out.println(maxn);
t1=0;
while(t1<1000){
minv=999;
maxm=999;
for (m=1;m<411;m++){
x1=a[m][maxn];
px=0;
if (x1==0)px=100;
if (x1<0)px=100;
if (px>50)x1=1;
x2=a[m][0]/x1;
if (px>50)x2=1000;
if (x2<0)x2=1000;
if (x2<minv)maxm=m;
if (x2<minv)minv=x2;
}
System.out.println(maxm);
for (m=0;m<411;m++){
z=a[m][maxn]/a[maxm][maxn];
if (maxm==m)z=0;
for (n=0;n<811;n++){
a[m][n]=a[m][n]-z*a[maxm][n];
}
}
maxv=0;
maxn=999;
for (n=1;n<811;n++){
if (a[0][n]>maxv)maxn=n;
if (a[0][n]>maxv)maxv=a[0][n];
}
System.out.println(maxn);
if (maxn>900)t1=10000;
t1=t1+1;
}
for (n=1;n<400;n++){
p1=0;
p2[n]=0;
p3[n]=0;
for (m=1;m<411;m++){
if (a[m][n]==0)p1=p1+1;
if (a[m][n]>0)p3[n]=m;
if (a[m][n]<0)p3[n]=m;
}
if (p1==409)p2[n]=100;
}
for (s=1;s<11;s++){
cs[s]=c[s];
ys[s]=y[s];
}
for (s=1;s<11;s++){
for (j=1;j<11;j++){
n=40*(s-1)+j;
if (p2[n]>50)cs[s]=cs[s]+a[p3[n]][0]/a[p3[n]][n];
}
for (j=11;j<21;j++){
n=40*(s-1)+j;
if (p2[n]>50)cs[s]=cs[s]-a[p3[n]][0]/a[p3[n]][n];
}
for (j=21;j<31;j++){
n=40*(s-1)+j;
if (p2[n]>50)ys[s]=ys[s]+a[p3[n]][0]/a[p3[n]][n];
}
for (j=31;j<41;j++){
n=40*(s-1)+j;
if (p2[n]>50)ys[s]=ys[s]-a[p3[n]][0]/a[p3[n]][n];
}
}
e=0;
for (s=1;s<11;s++){
e=e+(cs[s]-c[s])*(cs[s]-c[s])+(ys[s]-y[s])*(ys[s]-y[s]);
}
for (s=1;s<11;s++){
c[s]=cs[s];
y[s]=ys[s];
}
if (e<0.0001)t2=1000;
t2=t2+1;
}
t3=t3+1;
}
for (s=1;s<11;s++){
System.out.println(c[s]);
System.out.println(y[s]);
}
}
}
最終更新:2010年06月29日 11:44