#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[11][101],cp[11][101],lx[11][101],lp[11][101];
double th[11];
int m,m1,n,n2,n3,t;
double c[101],l[101];
FILE *fp;
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 (m=1;m<=10;m++){
th[m]=0.95+0.01*m;
}
for (n=1;n<=100;n++){
k[n] = n * h;
}
for (m=1;m<=10;m++){
for (n=1;n<=100;n++){
lx[m][n]=ls;
cx[m][n] = th[m]*pow(k[n], a) * pow(lx[m][n],1 - a);
}
}
t = 0;
while(t<100){
for (m=1;m<=10;m++){
for (n=10;n<=90;n++){
k1 = k[n] + th[m]*pow(k[n],a) * pow(lx[m][n] , 1 - a) - cx[m][n];
n1 = k1 / h;
n2 = floor(n1);
n3 = n2 + 1;
uc=0;
for (m1=1;m1<=10;m1++){
c1 = cx[m1][n2] + (n1 - n2) * (cx[m1][n3] - cx[m1][n2]);
l1 = lx[m1][n2] + (n1 - n2) * (lx[m1][n3] - lx[m1][n2]);
r1 = th[m1]*a * pow(k1 ,a - 1) * pow(l1 ,1 - a);
uc =uc+(beta * (1 + r1))/c1;
}
uc=0.1*uc;
cp[m][n]=1/uc;
w1 = th[m]*(1 - a) * pow(k[n],a) * pow(lx[m][n],-a);
lp[m][n] = 1 - cx[m][n] / w1;
}
}
e = 0;
for (m=1;m<=10;m++){
for (n=10;n<=90;n++){
e = e + pow(cx[m][n] - cp[m][n],2) + pow(lx[m][n] - lp[m][n], 2);
}
}
for (m=1;m<=10;m++){
for (n=10;n<=90;n++){
cx[m][n] = cp[m][n];
lx[m][n] = lp[m][n];
}
}
if (e<0.001) t=1000;
t=t+1;
}
k1=k[40];
m=5;
for (t=1;t<=99;t++){
n1 = k1 / h;
n2 = floor(n1);
n3 = n2 + 1;
c[t]=cx[m][n2] + (n1 - n2) * (cx[m][n3] - cx[m][n2]);
l[t]=lx[m][n2] + (n1 - n2) * (lx[m][n3] - lx[m][n2]);
k1 = k1 + th[m]*pow(k1,a) * pow(l[t] , 1 - a) - c[t];
}
fp = fopen( "dsge12.dat", "w" );
for (t=1;t<=90;t++){
fprintf(fp,"%d",t);
fprintf(fp,",");
fprintf(fp,"%f",c[t]);
fprintf(fp,"\n");
}
fclose( fp );
return 0;
}
最終更新:2009年12月12日 18:55