class pro{
public static void main(String args[]){
double th1,th2,cs1,xs1,cs2,xs2;
double h;
double uc1,ux1,uc2,ux2,u1,u2;
double x[][]=new double[42][82];
double th[]=new double[11];
double cs[]=new double[11];
double xs[]=new double[11];
double x3;
double thth;
int s,m,n,p;
int t2,t3;
h=0.01;
for (s=1;s<11;s++){
th[s]=1+0.1*s;
xs[s]=0.5;
cs[s]=th[s]*(1-xs[s]);
}
t3=0;
while(t3<5){
t2=0;
while(t2<100){
for (m=0;m<42;m++){
for (n=0;n<82;n++){
x[m][n]=0;
}
}
for (s=1;s<11;s++){
m=4*s-3;
n=2*s-1;
x[m][n]=1;
x[m][0]=cs[s]+h;
x[m+1][n]=-1;
x[m+1][0]=-cs[s]+h;
x[m+2][n+1]=1;
x[m+2][0]=xs[s]+h;
x[m+3][n+1]=-1;
x[m+3][0]=-xs[s]+h;
}
thth=0;
for (s=1;s<11;s++){
n=2*s-1;
x[41][n]=1;
x[41][n+1]=th[s];
thth=thth+th[s];
}
x[41][0]=thth;
for (m=1;m<42;m++){
x[m][20+m]=1;
}
x=f1(x);
for (s=1;s<11;s++){
n=2+s-1;
x[0][n]=1/cs[s];
x[0][n+1]=1/xs[s];
}
x=f2(x);
p=ch(x);
if (p<20)t2=1000;
while(p>19){
for (s=1;s<11;s++){
for (m=1;m<42;m++){
if (x[m][2*s-1]>0)cs[s]=x[m][0]/x[m][2*s-1];
if (x[m][2*s-1]<0)cs[s]=x[m][0]/x[m][2*s-1];
}
for (m=1;m<42;m++){
if (x[m][2*s]>0)xs[s]=x[m][0]/x[m][2*s];
if (x[m][2*s]<0)xs[s]=x[m][0]/x[m][2*s];
}
}
p=0;
}
t2=t2+1;
}
h=h/2;
t3=t3+1;
}
for (s=1;s<11;s++){
System.out.println(cs[s]);
System.out.println(xs[s]);
}
}
public static int ch(double[][] x){
int m,n;
int p1,p;
p=0;
for (n=1;n<21;n++){
p1=0;
for (m=1;m<42;m++){
if (x[m][n]==0)p1=p1+1;
}
if (p1==40)p=p+1;
}
return p;
}
public static double[][] f1(double[][] x){
int s,m,n,maxm,maxn,t1,px;
double maxv,minv,under,op,z;
for (s=1;s<11;s++){
n=61+2*s-1;
m=4*s-2;
x[0][n]=-1;
x[0][n+1]=-1;
x[m][n]=-1;
x[m+2][n+1]=-1;
}
for (s=1;s<11;s++){
m=4*s-2;
for (n=0;n<82;n++){
x[0][n]=x[0][n]-x[m][n]-x[m+2][n];
}
}
maxn=999;
maxv=0;
for (n=1;n<82;n++){
if(x[0][n]>maxv)maxn=n;
if(x[0][n]>maxv)maxv=x[0][n];
}
if (maxn>900)t1=1000;
t1=0;
while(t1<100){
maxm=999;
minv=999;
for (m=1;m<42;m++){
under=x[m][maxn];
px=0;
if (under==0)px=100;
if (px>50)under=1;
op=x[m][0]/under;
if (op<0)px=100;
if (px>50)op=1000;
if (op<minv)maxm=m;
if (op<minv)minv=op;
}
for (m=0;m<42;m++){
z=x[m][maxn]/x[maxm][maxn];
if (m==maxm)z=0;
for (n=0;n<82;n++){
x[m][n]=x[m][n]-z*x[maxm][n];
}
}
maxn=999;
maxv=0;
for (n=1;n<82;n++){
if(x[0][n]>maxv)maxn=n;
if(x[0][n]>maxv)maxv=x[0][n];
}
if (maxn>900)t1=1000;
t1=t1+1;
}
return x;
}
public static double[][] f2(double[][] x){
int m,n,maxm,maxn,t1,px;
double maxv,minv,under,op,z;
maxn=999;
maxv=0;
for (n=1;n<62;n++){
if(x[0][n]>maxv)maxn=n;
if(x[0][n]>maxv)maxv=x[0][n];
}
if (maxn>900)t1=1000;
t1=0;
while(t1<100){
maxm=999;
minv=999;
for (m=1;m<42;m++){
under=x[m][maxn];
px=0;
if (under==0)px=100;
if (px>50)under=1;
op=x[m][0]/under;
if (op<0)px=100;
if (px>50)op=1000;
if (op<minv)maxm=m;
if (op<minv)minv=op;
}
for (m=0;m<42;m++){
z=x[m][maxn]/x[maxm][maxn];
if (m==maxm)z=0;
for (n=0;n<62;n++){
x[m][n]=x[m][n]-z*x[maxm][n];
}
}
maxn=999;
maxv=0;
for (n=1;n<62;n++){
if(x[0][n]>maxv)maxn=n;
if(x[0][n]>maxv)maxv=x[0][n];
}
if (maxn>900)t1=1000;
t1=t1+1;
}
return x;
}
}
最終更新:2010年06月20日 19:03