我试图解决一维热方程的问题,其中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”这样的东西。
如何在代码中添加边界条件以提供第二个图?