2

我正在尝试解决一维热方程的问题,其中 u[x,t] 是一维条形中的能量密度,在时间 t=0 中,所有能量都集中在 x=0 点。我想找到给定时间的解决方案,例如 t= 64、128,256 等。

代码(我删除了评论,因为英语不是我的母语):

#include <stdio.h>
#include <math.h>

#define D 0.1
#define T 1024
#define tol 0.0000000000000001

int x,t;
double r,DE,u[T+1], ua[T-1];

main() {
    u[0] = 1;
    for(x=1; x<=T;x++)
        u[x] = 0;
    t=0;
    do {
        t++;
        for(x=0; x<=t; x++)
            ua[x] = u[x];
        u[0] = ua[0] + 2*D*(ua[1]-ua[0]);
        for(x=1; x<=t; x++)
            u[x] = ua[x] + D*(ua[x+1]-2*ua[x]+ua[x-1]);
    } while(t<T);
    DE = 0.0;

    for(x=0; x<=t; x++) {
        if(u[x]>tol) {
            printf("\n %d %1.20f", x,u[x]);
            DE += x*x*u[x];
        } else
            break;
    }
    printf("Delta(t=%d) = %20.20f", t, sqrt(2*DE));
}

在“A”图中绘制数据结果: 图表

我想要像“B”这样的东西。

如何将边界条件放入代码中以给我第二张图

4

0 回答 0