アットウィキロゴ

pp100gg

class pro{
public static void main(String args[]){
double c[]=new double[101];
double y[]=new double[101];
double cs[]=new double[101];
double ys[]=new double[101];
double th[]=new double[101];
double a[][]=new double[600][1099];
int s,m,n,j;
int maxn,maxm,px;
double maxv,minv,x1,x2,z,e;
double u1,u2,up;
double h,tl,tr;
int t1,t3,t4,t5;
int p1;
for (s=1;s<101;s++){
th[s]=1+0.02*s;
}
tl=tls(th);
tr=trs(tl,th);
for(s=1;s<101;s++){
y[s]=th[s]*lx(s,tl,tr,th);
c[s]=(1-tl)*y[s]+tr;
}
System.out.println(tl);
System.out.println(tr);
t5=0;
up=0.002;
while(t5<1){
up=2*up;
t4=0;
h=0.002;
while(t4<1){
t3=0;
h=0.5*h;
while(t3<1){
for (m=0;m<500;m++){
for (n=0;n<1099;n++){
a[m][n]=0;
}
}

for (s=1;s<101;s++){
n=4*s-3;
a[0][n]=1/c[s];
a[0][n+1]=-1/c[s];
a[0][n+2]=1/(y[s]-th[s]);
a[0][n+3]=-1/(y[s]-th[s]);
}

for (n=401;n<500;n++){
a[0][n]=up;
}

for (m=1;m<401;m++){
a[m][m]=1;
}

for (m=401;m<500;m++){
a[m][m]=1;
}


for (s=2;s<101;s++){
m=399+s;
n=4*s-3;
a[m][n]=-1/c[s];
a[m][n+1]=1/c[s];
a[m][n+2]=-1/(y[s]-th[s]);
a[m][n+3]=1/(y[s]-th[s]);
}

for (s=2;s<101;s++){
m=399+s;
n=4*s-7;
a[m][n]=1/c[s-1];
a[m][n+1]=-1/c[s-1];
a[m][n+2]=1/(y[s-1]-th[s]);
a[m][n+3]=-1/(y[s-1]-th[s]);
}

for (s=2;s<101;s++){
m=498+s;
a[m][399+s]=1;
}

for (s=2;s<101;s++){
m=399+s;
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+1;
}

for (m=1;m<600;m++){
a[m][m+499]=1;
}

for (s=1;s<101;s++){
n=4*s-3;
a[59][n]=1;
a[59][n+1]=-1;
a[59][n+2]=-1;
a[59][n+3]=1;
}
  
for (m=1;m<401;m++){
a[m][0]=h;
}
  
for (m=500;m<599;m++){
a[m][0]=1;
}

maxv=0;
maxn=999;
for (n=1;n<1099;n++){
if (a[0][n]>maxv)maxn=n;
if (a[0][m]>maxv)maxv=a[0][n];
}

t1=0;
while(t1<10000){
minv=9999;
maxm=9999;
for (m=1;m<600;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=10000;  
if (x2<minv)maxm=m;
if (x2<minv)minv=x2;
}

for (m=0;m<600;m++){
z=a[m][maxn]/a[maxm][maxn];
if (m==maxm)z=0;
for (n=0;n<1099;n++){
a[m][n]=a[m][n]-z*a[maxm][n];
}  
}  

maxv=0;
maxn=9999;
for (n=1;n<1099;n++){
if (a[0][n]>maxv)maxn=n;
if (a[0][m]>maxv)maxv=a[0][n];
}
if (maxn>9000)t1=20000;
t1=t1+1;
}

for (s=1;s<101;s++){
cs[s]=c[s];
ys[s]=y[s];
}

for (s=1;s<101;s++){
p1=0;
n=4*s-3;
for (m=1;m<600;m++){
if (a[m][n]==0)p1=p1+1;
}
while(p1==598){
for (m=1;m<600;m++){
if (a[m][n]>0)cs[s]=c[s]+a[m][0]/a[m][n];
if (a[m][n]<0)cs[s]=c[s]+a[m][0]/a[m][n];
p1=0;
}
}

p1=0;
n=4*s-2;
for (m=1;m<600;m++){
if (a[m][n]==0)p1=p1+1;
}
while(p1==598){
for (m=1;m<600;m++){
if (a[m][n]>0)cs[s]=c[s]-a[m][0]/a[m][n];
if (a[m][n]<0)cs[s]=c[s]-a[m][0]/a[m][n];
p1=0;
}
}


p1=0;
n=4*s-1;
for (m=1;m<600;m++){
if (a[m][n]==0)p1=p1+1;
}
while(p1==598){
for (m=1;m<600;m++){
if (a[m][n]>0)ys[s]=y[s]+a[m][0]/a[m][n];
if (a[m][n]<0)ys[s]=y[s]+a[m][0]/a[m][n];
p1=0;
}
}

p1=0;
n=4*s;
for (m=1;m<600;m++){
if (a[m][n]==0)p1=p1+1;
}
while(p1==598){
for (m=1;m<600;m++){
if (a[m][n]>0)ys[s]=y[s]-a[m][0]/a[m][n];
if (a[m][n]<0)ys[s]=y[s]-a[m][0]/a[m][n];
p1=0;
}
}  
}
e=0;
for (s=1;s<101;s++){
e=e+(c[s]-cs[s])*(c[s]-cs[s]);
e=e+(y[s]-ys[s])*(y[s]-ys[s]);
}  
if (e<0.0001)t3=1000;
for (s=1;s<101;s++){
c[s]=cs[s];
y[s]=ys[s];
}
t3=t3+1;
}
t4=t4+1;
}
t5=t5+1;
}

for (s=1;s<100;s++){
System.out.println(s);  
System.out.println(1-(c[s+1]-c[s])/(y[s+1]-y[s]));  
}

}
static double lx(int s,double tl,double tr,double th[]){
double w1,l1;
w1=(1-tl)*th[s];
l1=(w1-tr)/(2*+w1);
if (l1<0)l1=0;
return l1;
}

static double bud(double tl,double tr,double th[]){
double c1,y1,b1;
int s;
b1=0;
for (s=1;s<101;s++){
y1=th[s]*lx(s,tl,tr,th);
c1=(1-tl)*y1+tr;
b1=b1+y1-c1;
}
return b1;
}

static double trs(double tl,double th[]){
double tr1,tr2,tr3,b1,b2;
int t;
tr1=0.1;
tr2=0.2;
b1=bud(tl,tr1,th);
t=0;
while(t<100){
b2=bud(tl,tr2,th);
tr3=tr2-b2*(tr2-tr1)/(b2-b1);
tr1=tr2;
tr2=tr3;
b1=b2;
if (b2*b2<0.0001)t=1000;
t=t+1;
}
return tr2;
}
static double tls(double th[]){
int m;
double tl,tr,w1,maxw,maxtl;
maxw=-999;
maxtl=0;
for (m=10;m<300;m++){
tl=0.001*m;
tr=trs(tl,th);
w1=wel(tl,tr,th);
if (w1>maxw)maxtl=tl;
if (w1>maxw)maxw=w1;
}
return maxtl;
}
static double wel(double tl,double tr,double th[]){
double c1,l1,w1;
int s;
w1=0;
for (s=1;s<101;s++){
l1=lx(s,tl,tr,th);
c1=(1-tl)*th[s]*l1+tr;
w1=w1+u(c1,1-l1);;
}
return w1;
}
static double u(double c1,double x1){
double u1,c2,x2;
int pp;
pp=0;
c2=c1;
x2=x1;
if (c2<0)pp=100;
if (x2<0)pp=100;
if (x2>1)pp=100;
if (x2==0)pp=100;
if (pp>50)c2=0.5;
if (pp>50)x2=0.5;
u1=Math.log(c2)+Math.log(x2);
if (pp>50)u1=-999;
return u1;
}
}
最終更新:2010年07月01日 16:39