package w;
class nonlinear{
int s,n1,n2;
int[] th= new int[101];
int[] c= new int[101];
int[] y= new int[101];
double[][][] ux= new double[101][21][21];
double[][][] wx= new double[101][21][21];
int[][][] nearw= new int[101][21][21];
double[][][] us= new double[101][21][21];
double[][][] v= new double[101][21][101];
int[][][] gotob= new int[101][21][101];
int[][][] gotom= new int[101][21][101];
int[] ws= new int[101];
double c1,l1,u1;
double h;
int b,bx;
int m1,m2;
void makedata(){
makeus sub=new makeus();
sub.th=th;
sub.h=h;
sub.c=c;
sub.y=y;
sub.makedata();
us=sub.us;
s=1;
for(m1=-10;m1<11;m1++){
for(m2=-50;m2<51;m2++){
v[s][m1+10][m2+50]=-999;
}
}
for(m1=-10;m1<11;m1++){
for(m2=-10;m2<11;m2++){
v[s][m1+10][m2+50]=us[s][m1+10][m2+10];
}
}
int b1,z,mx;
double maxv,v1;
int bs,ms;
for(s=2;s<100;s++){
for(m1=-10;m1<11;m1++){
for(b=-50;b<51;b++){
maxv=-999;
bs=0;
ms=0;
for(mx=-10;mx<11;mx++){
for(bx=-10;bx<11;bx++){
u1=us[s][m1+10][bx+10];
b1=b-bx;
z=0;
if(b1<-50)z=100;
if(b1>50)z=100;
if(z>50)b1=0;
m2=0;
v1=u1+v[s-1][m2+10][b1+50];
if(z>50)v1=-999;
if(v1>maxv)bs=b1;
if(v1>maxv)ms=mx;
if(v1>maxv)maxv=v1;
}
}
v[s][m1+10][b+50]=maxv;
}
}
}
}
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;
}
}
package w;
public class makeus {
int s,n1,n2;
int[] th= new int[101];
int[] c= new int[101];
int[] y= new int[101];
double[][][] ux= new double[101][21][21];
double[][][] wx= new double[101][21][21];
int[][][] nearw= new int[101][21][21];
double[][][] us= new double[101][21][21];
int[] ws= new int[101];
double c1,l1,u1;
double h;
int b;
void makedata(){
for (s=1;s<101;s++){
for (n1=-10;n1<11;n1++){
for (n2=-10;n2<11;n2++){
c1=(c[s]+n1)*h;
l1=(double)(y[s]+n2)/th[s];
u1=u(c1,1-l1);
ux[s][n1+10][n2+10]=u1;
}
}
}
for (s=1;s<100;s++){
for (n1=-10;n1<11;n1++){
for (n2=-10;n2<11;n2++){
c1=(c[s]+n1)*h;
l1=(double)(y[s]+n2)/th[s+1];
u1=u(c1,1-l1);
wx[s][n1+10][n2+10]=u1;
}
}
}
double x1;
int x2;
for (s=1;s<100;s++){
u1=wx[s][10][10];
x1=Math.exp(u1);
ws[s]=(int)(x1/h);
}
for (s=1;s<100;s++){
for (n1=-10;n1<11;n1++){
for (n2=-10;n2<11;n2++){
u1=wx[s][n1+10][n2+10];
x1=Math.exp(u1);
nearw[s][n1+10][n2+10]=(int)(x1/h)-ws[s];
}
}
}
int z;
for (s=1;s<100;s++){
for (n1=-10;n1<11;n1++){
for (n2=-10;n2<11;n2++){
us[s][n1+10][n2+10]=-999;
}
}
}
int nw;
for(s=1;s<100;s++){
for(b=-10;b<11;b++){
for (n1=-10;n1<11;n1++){
n2=b+n1;
z=0;
if(n2<-10)z=100;
if(n2>10)z=100;
if(z>50)n2=0;
u1=ux[s][n1+10][n2+10];
nw=nearw[s][n1+10][n2+10];
if(nw>10)z=100;
if(nw<-10)z=100;
if(z>50)nw=0;
if(z>50)u1=-999;
if(u1>us[s][nw+10][b+10])us[s][nw+10][b+10]=u1;
}
}
}
}
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;
}
}
最終更新:2013年09月24日 05:24