class tax{
public static void main(String args[]){
double th[]= new double[101];
int s;
double tl;
double tr;
double ls;
double w;
double cs;
double ys;
double b1;
double b2;
double tr1;
double tr2;
double tr3;
double wel;
double maxwel;
double maxtl;
double maxtr;
int t;
int n;
double h;
double c[]= new double[101];
double y[]= new double[101];
double u[][][]= new double[101][3][3];
int n1;
int n2;
for (s=1;s<101;s++){
th[s]=0.02*s;
}
maxtl=0;
maxwel=-999;
maxtr=0;
for (n=20;n<45;n++){
tl=0.01*n;
tr1=0.01;
tr2=0.02;
tr=tr1;
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.00001)t=1000;
t=t+1;
}
tr=tr2;
wel=seekwel(tl,tr,th);
if (wel>maxwel)maxtl=tl;
if (wel>maxwel)maxtr=tr;
if (wel>maxwel)maxwel=wel;
}
tl=maxtl;
tr=maxtr;
for (s=1;s<101;s++){
w=(1-tl)*th[s];
ls=(w-tr)/(2*w);
if (ls<0)ls=0;
c[s]=w*ls+tr;
y[s]=th[s]*ls;
}
h=0.001;
for (s=1;s<101;s++){
for (n1=-1;n1<2;n1++){
for (n2=-1;n2<2;n2++){
cs=c[s]+n1*h;
ls=(y[s]+n2*h)/th[s];
u[s][n1+1][n2+1]=ux(cs,ls);
}
}
}
System.out.println(maxtl);
}
static double ux(double c1,double l1){
double u1;
double c3;
double l3;
int pp;
pp=0;
c3=c1;
l3=l1;
if (c3<0)pp=100;
if (l3<0)pp=100;
if (l3>1)pp=100;
if (pp>50)c3=0.5;
if (pp>50)l3=0.5;
u1=Math.log(c3)+Math.log(1-l3);
if (pp>50)u1=-999;
return u1;
}
static double bud(double tl,double tr,double th[]){
double bx;
int s;
double w;
double y1;
double c1;
double l1;
bx=0;
for (s=1;s<101;s++){
w=(1-tl)*th[s];
l1=(w-tr)/(2*w);
if (l1<0)l1=0;
y1=th[s]*l1;
c1=w*l1+tr;
bx=bx+y1-c1;
}
return bx;
}
static double seekwel(double tl,double tr,double th[]){
double sw;
int s;
double w;
double l1;
double c1;
sw=0;
for (s=1;s<101;s++){
w=(1-tl)*th[s];
l1=(w-tr)/(2*w);
if (l1<0)l1=0;
c1=w*l1+tr;
sw=sw+ux(c1,l1);
}
return sw;
}
}
最終更新:2009年12月17日 21:12