#include <stdio.h>
#include <math.h>
int main(void){
double a,beta,ks,h,k1,r1,c1,e,n1,uc;
double k[101],cx[11][101],cp[11][101],px[11][101],ps[11][101];
double th[11],z1,z2,i1;
double p1,p2,p3,px1,pi,ms;
int s,n,n2,n3,t,s1,m1,t2;
for (s=1;s<=10;s++){
th[s]=0.95+0.01*s;
}
a=0.33;
beta=0.95;
ks=pow((1/beta-1)/a,1/(a-1));
h=2*ks/100;
for (n=1;n<=100;n++){
k[n] = n*h;
}
for (s=1;s<=10;s++){
for (n=1;n<=100;n++){
cx[s][n]=th[s]*pow(k[n],a);
}
}
t=0;
while (t<100){
for (s=1;s<=10;s++){
for (n=10;n<=90;n++){
k1=k[n]+th[s]*pow(k[n],a)-cx[s][n];
n1=k1/h;
n2=floor(n1);
n3=n2+1;
uc=0;
for (s1=1;s1<=10;s1++){
c1=cx[s1][n2]+(n1-n2)*(cx[s1][n3]-cx[s1][n2]);
r1=th[s1]*a*pow(k1,a-1);
uc=uc+(beta*(1+r1))/c1;
}
uc=0.1*uc;
cp[s][n]=1/uc;
}
}
e=0;
for (s=1;s<=10;s++){
for (n=10;n<=90;n++){
e=e+pow(cx[s][n]-cp[s][n],2);
}
}
for (s=1;s<=10;s++){
for (n=10;n<=90;n++){
cx[s][n]=cp[s][n];
}
}
if (e < 0.0001) t=1000;
t=t+1;
}
ms=20;
for (s=1;s<=10;s++){
for (n=1;n<=100;n++){
px[s][n]=1;
}
}
t2=0;
while (t2<100){
for (s=1;s<=10;s++){
for (n=10;n<=90;n++){
p1=0.95*px[s][n];
p2=1.05*px[s][n];
k1=k[n]+th[s]*pow(k[n],a)-cx[s][n];
n1=k1/h;
n2=floor(n1);
n3=n2+1;
z1=0;
for (m1=1;m1<=10;m1++){
c1=cx[m1][n2]+(n1-n2)*(cx[m1][n3]-cx[m1][n2]);
r1=th[m1]*a*pow(k1,a-1);
px1=px[m1][n2]+(n1-n2)*(px[m1][n3]-px[m1][n2]);
pi=px1/p1-1;
i1=(1+pi)*(1+r1)-1;
z1=z1+beta*ms*i1/(c1*(1+pi))-p1;
}
t=0;
while (t<100){
z2=0;
for (m1=1;m1<=10;m1++){
c1=cx[m1][n2]+(n1-n2)*(cx[m1][n3]-cx[m1][n2]);
r1=th[m1]*a*pow(k1,a-1);
px1=px[m1][n2]+(n1-n2)*(px[m1][n3]-px[m1][n2]);
pi=px1/p2-1;
i1=(1+pi)*(1+r1)-1;
z2=z2+beta*ms*i1/(c1*(1+pi))-p2;
}
p3=p2-z2*(p2-p1)/(z2-z1);
p1=p2;
p2=p3;
z1=z2;
if (z2*z2<0.0001) t=1000;
t=t+1;
}
ps[s][n]=p2;
}
}
e=0;
for (s=1;s<=10;s++){
for (n=10;n<=90;n++){
e=e+pow(px[s][n]-ps[s][n],2);
}
}
for (s=1;s<=10;s++){
for (n=10;n<=90;n++){
px[s][n]=ps[s][n];
}
}
if (e<0.0001) t2=1000;
t2=t2+1;
printf("%f",e);
printf("\n");
}
return 0;
}
最終更新:2009年11月29日 04:39