/* file=ZEXhmms.c */ #include <stdio.h> #include <math.h> #define kk 6 main() { FILE *fp; int iter,k; double x[kk+1],u[kk+1],ramda[kk+1],s[kk+1]; double h,c,x0,xx,uu,tt,dt,epsil,cj; fp = fopen("zexhmms.txt","w"); x0=0.; xx=0.; uu=50.; h=1.; c=1; tt=6.; dt=1; for(k=0;k<=kk;k++) s[k]=50.; for(k=0;k<=kk;k++) { x[k]=x0; u[k]=0.; ramda[k]=0.; } epsil=0.1; for(iter=1;iter<=3;iter++) { for(k=0;k<=kk-1;k++) u[k]=u[k]-epsil*(2.*c*(u[k]-uu)+ramda[k+1])*dt; for(k=0;k<=kk-1;k++) x[k+1]=x[k]+dt*(u[k]-s[k]); for(k=kk-1;k>=1;k--) ramda[k]=ramda[k+1]-dt*(-2*h*(x[k]-xx)); cj=0.; for(k=0;k<=kk-1;k++) cj=cj+dt*(h*(x[k]-xx)*(x[k]-xx)+c*(u[k]-uu)*(u[k]-uu)); printf("ITER= M J=%6.4f n", iter,cj); fprintf(fp,"ITER= M J=%6.4f n", iter,cj); } printf(" T X U S RAMDA "); for(k=0;k<=kk;k=k+5) printf("n %6.2f %6.2f %6.2f %6.2f %6.2f",(double)k*dt,x[k],u[k],s[k],ramda[k]); fprintf(fp,"n %6.2f %6.2f %6.2f %6.2f %6.2f",(double)k*dt,x[k],u[k],s[k],ramda[k]); fclose(fp); } 이거를 손계산으로 해야하는데요....u[k]=u[k]-epsil*(2.*c*(u[k]-uu)+ramda[k+1])*dt; 이거에서 ramda[k+1]를 어떻게 구하나요... 계산 사이클이 한번 어케 되는지 이해가 안가여~ㅜㅜ a |
디버그 한줄씩 해보면 밑에 값 다나오는데ㅋㅋㅋㅋㅋ - DCW
어우 변수명 제발 4글자 이상 쓰자