0
double rho[1001], rhonew[1001];

int main(void)
{
    int tstep, tmax, n, nmax, r;
    double t, dt, x, dx;
    dt = 0.001;
    tmax = 1000;
    dx = 0.1;
    nmax = 1000;
    rho0=1.0;
    r=1;

    FILE *afinal;
    afinal = fopen("afinal.txt","w");
    FILE *amid;
    amid = fopen("amid.txt","w");

    for (n = 0; n <= nmax; n++)
    {
        rho[n] = 500;
    }        

    for (n = 0; n <= nmax; n++)
    {
        rhonew[n] = 1;
    }
    for (tstep=1; tstep<=tmax; tstep++)
    {
        rho[tstep] += -tstep;
        if(tstep == r*10)
//I want this if statement to execute every 10 "tsteps" to overwrite the data in amid.txt
        {
            for (n = 0; n <= nmax; n++)
            {
                x = n*dx;
                fprintf(amid, "%f \t %f \n", x, rho[n]);
            }
        fclose(amid);   
        r++;        
        }
    }

    for (n = 0; n <= nmax; n++)
    {
        x = n*dx;
        fprintf(afinal, "%f \t %f \n", x, rho[n]);
    }
    fclose(afinal);   
return 0;
}

私の配列は「途中」で一度だけ書き込みますが、情報を書き込み、その古い情報をより大きな「tmax」ループ内で新しい情報で数回上書きしたいと考えています。これにより、gnuplot を使用してデータのスナップショットを「時間の経過とともに」グラフ化し、微分方程式の作業が進化するのを見ることができるようにしたいと考えています。

4

2 に答える 2

1

このような意味ですか?:

for (tstep=1; tstep<=tmax; tstep++)
{
    rho[tstep] += -tstep;
    if(tstep == r)
    {
        rewind(amid);
        for (n = 0; n <= nmax; n++)
        {
            x = n*dx;
            fprintf(amid, "%f \t %f \n", x, rho[n]);
        }
        r += 10;
    }
}

// later....
close(amid);

ところで: なぜrho[tstep] += -tstep;代わりにrho[tstep] -= tstep;... を使うのですか? これは少し読みにくいようです。

おそらくあなたの問題は、そのファイルをあまりにも早く閉じることです..コードの誤解を招くインデントにも注意してください。

さらに、ここで質問することになっています。あなたの質問は実際には何ですか?

于 2013-08-08T23:38:38.737 に答える