至急質問があります。
以下のソースコードは偏微分方程式を解いているものなのですが、C言語について質問させていただきます。
下記の
//rho = 6782 - 0.27 * t[i][0];
//cp = 436 - 0.0813 * (t[i][0] - tm);
//lam = 94.61 + 4.41e-2 * (t[i][0] - tm);
//a = lam / rho / cp;
はコメントアウトにしていますが、このコメントアウトを外すと出力されるt[5][1]が変わってきます。
この式の意味や変数の意味は置いといて、このコメントアウト文以降でこれらの変数は使っていないのですが、このようなことは起こり得るのでしょうか。
また、このようなことが起こる理由について教えていただけますでしょうか。
環境
visual studio2019
windows 10
C
1#include < stdio.h > 2#define _USE_MATH_DEFINES 3#include < math.h > 4 5#define NX 10 6#define NT 100 7#define Tmax 1 8 9void main(void) 10{ 11 double t[NX + 2][2], dt, dx, r, a, time, pp, cp, lam, rho, tm; 12 int i, imax; 13 FILE* fp; 14 fopen_s(&fp, "u0.xls", "w"); 15 16 dt = 1 / (double)NT; 17 dx = 1 / (double)NX; 18 imax = NX; 19 a = 1.0; 20 r = dt / dx / dx; 21 time = 0; 22 tm = 1850 + 273; 23 24 fprintf(fp, "\t"); 25 for (i = 0; i <= imax; i++) 26 fprintf(fp, "%lf\t", i * dx); 27 fprintf(fp, "\n"); 28 29 //初期条件 30 fprintf(fp, "0\t"); 31 for (i = 0; i <= imax; i++) 32 { 33 //三角形 34 /*if (i <= imax / 2) 35 t[i][0] = 2.0 / (dotble)imax * (double)i; 36 else 37 t[i][0] = -2.0 / (double)imax * (double)i + 2.0;*/ 38 39 //sin(x); 40 t[i][0]=sin(M_PI*(double)i*dx); 41 fprintf(fp, "%7.4lf\t", t[i][0]); 42 43 } 44 fprintf(fp, "\n"); 45 46 printf(" dx=%7.4lf dt=%7.4lf \n", dx, dt); 47 printf(" r=%7.3lf \n", r); 48 49 //時間積分 50 do 51 { 52 //pp = 100 * exp(-pow((time - 0.5), 2) / 0.3); 53 for (i = 1; i < imax; i++) 54 //if(i==1) 55 //rho = 6782 - 0.27 * t[i][0]; 56 //cp = 436 - 0.0813 * (t[i][0] - tm); 57 //lam = 94.61 + 4.41e-2 * (t[i][0] - tm); 58 //a = lam / rho / cp; 59 t[i][1] = t[i][0] + (t[i + 1][0] - 2 * t[i][0] + t[i - 1][0]) * r; 60 //else 61 //t[i][1] = t[i][0] + (t[i + 1][0] - 2 * t[i][0] + t[i - 1][0]) * r; 62 63 //境界条件 64 //t[0][1] = t[1][1]; 65 //t[imax][1] =t[imax-1][1]; 66 t[0][1] = 0; 67 t[imax][1] =0; 68 69 time = time + dt; 70 printf("t=%7.4lf\n", time); 71 72 fprintf(fp, "%7.4lf\t", time); 73 for (i = 0; i <= imax; i++) 74 fprintf(fp, "%8.5lf\t", t[i][1]); 75 fprintf(fp, "\n"); 76 77 //更新 78 for (i = 0; i <= imax; i++) 79 t[i][0] = t[i][1]; 80 81 printf("%8.3e\n",t[5][1]); 82 } while (Tmax > time); 83}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/17 13:53