#include <stdio.h>
#include <math.h>
int main(void){
double a,beta,ks,ls,h,k1,l1,r1,w1,c1,e,n1,uc;
double k[101],cx[101],cp[101],lx[101],lp[101];
double px[101],ps[101];
int n,n2,n3,t,t2;
double p1,p2,p3,ms,pi,i1;
double z1,z2,px1;
beta = 0.95;
a = 0.33;
ls=(1-a)/(2-a);
ks = ls * pow((1 / beta - 1) / a, 1 / (a - 1));
h = 2 * ks / 100;
for (n=1;n<=100;n++){
k[n] = n * h;
lx[n]=ls;
}
for (n=1;n<=100;n++){
cx[n] = pow(k[n], a) * pow(lx[n],1 - a);
}
t = 0;
while(t<100){
for (n=10;n<=90;n++){
k1 = k[n] + pow(k[n],a) * pow(lx[n] , 1 - a) - cx[n];
n1 = k1 / h;
n2 = floor(n1);
n3 = n2 + 1;
c1 = cx[n2] + (n1 - n2) * (cx[n3] - cx[n2]);
l1 = lx[n2] + (n1 - n2) * (lx[n3] - lx[n2]);
r1 = a * pow(k1 ,a - 1) * pow(l1 ,1 - a);
cp[n] = c1 / (beta * (1 + r1));
w1 = (1 - a) * pow(k[n],a) * pow(lx[n],-a);
lp[n] = 1 - cx[n] / w1;
}
e = 0;
for (n=10;n<=90;n++){
e = e + pow(cx[n] - cp[n],2) + pow(lx[n] - lp[n], 2);
}
for (n=10;n<=90;n++){
cx[n] = cp[n];
lx[n] = lp[n];
}
if (e<0.001) t=1000;
t=t+1;
}
ms=20;
for (n=1;n<=100;n++){
px[n]=1;
}
t2=0;
while (t2<100){
for (n=10;n<=90;n++){
p1=0.95*px[n];
p2=1.05*px[n];
k1 = k[n] + pow(k[n],a) * pow(lx[n] , 1 - a) - cx[n];
n1 = k1 / h;
n2 = floor(n1);
n3 = n2 + 1;
c1 = cx[n2] + (n1 - n2) * (cx[n3] - cx[n2]);
l1 = lx[n2] + (n1 - n2) * (lx[n3] - lx[n2]);
r1 = a * pow(k1 ,a - 1) * pow(l1 ,1 - a);
r1=a*pow(k1,a-1)*pow(l1,1-a);
px1=px[n2]+(n1-n2)*(px[n3]-px[n2]);
pi=px1/p1-1;
i1=(1+pi)*(1+r1)-1;
z1=beta*ms*i1/(c1*(1+pi))-p1;
t=0;
while (t<100){
pi=px1/p2-1;
i1=(1+pi)*(1+r1)-1;
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[n]=p2;
}
e=0;
for (n=10;n<=90;n++){
e=e+pow(px[n]-ps[n],2);
}
for (n=10;n<=90;n++){
px[n]=ps[n];
}
if (e<0.001){
t2=1000;
}
t2=t2+1;
}
for (n=10;n<=90;n++){
printf("%f",px[n]);
printf("\n");
}
return 0;
}
最終更新:2009年12月12日 16:49