以下を完成させよ.
#include <stdio.h> #include <unistd.h> #define NT 800 // 時間の計算ステップ数 0--800 #define NX 200 // xの計算ステップ数 0--200 #define SLEEP_TIME 20000 // usleep()関数で処理が止まる時間[micro sec] void set_xt (int nx, int nt, double x[], double t[]); void initial_condition(int nx, int nt, double alpha, double u[][NT+1]); /*=====================================================================*/ /* main */ /*=====================================================================*/ int main(void){ double u[NX+1][NT+1]; double x[NX+1], t[NT+1]; double xmin, xmax, tmin, tmax; double delta_x, delta_t, alpha; int i, j; FILE *gp; //----------------------------------------------- // x座標の最小と最大を決める. xmin, xmax // 時刻の最小と最大をきめる. tmin, tmax // 計算ステップをきめる. delta_x, delta_t //----------------------------------------------- //------------------------------------------------------- // alphaを計算して,1以上ならば,警告を発して,プログラムを止める //------------------------------------------------------- set_xt(NX, NT, x, t); // あらかじめ,x[]とt[]を配列へ initial_condition(NX, NT, alpha, u); // 初期条件の設定 gp = popen("gnuplot -persist","w"); fprintf(gp, "set xrange [-0.1:1.1]\n"); fprintf(gp, "set yrange [-0.6:0.6]\n"); for(j=0; j<=1; j++){ printf("t=%f\n",t[j]); fprintf(gp, "plot '-' with lines linetype 1\n"); for(i=0; i<=NX; i++){ fprintf(gp,"%f\t%f\n", x[i], u[i][j]); } fprintf(gp, "e\n"); usleep(SLEEP_TIME); } for(j=2; j<=NT; j++){ printf("%d\tt=%f\n",j,t[j]); for(i=1; i<NX ; i++){ // -------------------------------------- // 差分化された波動方程式の計算.u[i][j] // -------------------------------------- } fprintf(gp, "plot '-' with lines linetype 1\n"); for(i=0; i<=NX; i++){ fprintf(gp,"%f\t%f\n", x[i], u[i][j]); } fprintf(gp,"e\n"); usleep(SLEEP_TIME); } pclose(gp); return 0; } /*=====================================================================*/ /* set x-coordinate and time */ /*=====================================================================*/ void set_xt (int nx, int nt, double x[], double t[]) { //------------------------------- //ここで,x[i],t[j]で設定する //------------------------------- } /*=====================================================================*/ /* set initial condition */ /*=====================================================================*/ void initial_condition(int nx, int nt, double alpha, double u[][NT+1]) { //------------------------------- //境界条件と初期条件の設定 //------------------------------- }
last update: