#include #define N 15 // 空间网格数 #define T 30 // 时间步数 #define L 1.0 // 空间长度 #define dt 1 // 时间步长 #define dx 1 // 空间步长 #define alpha 0.1 // 扩散系数 void printGrid(double grid[N]) { for (int i = 0; i < N;i++){ printf("%.2f ", grid[i]); printf("\t"); } printf("\n"); } int main() { double u[N+1]; // u为当前时刻的浓度分布 double u_new[N+1]; // u_new为下一个时刻的浓度分布 // 初始化浓度分布 for (int i = 0; i <= N; i++) { if (i >= 45*N/100&& i <= 55*N/100) { u[i] = 100.0; } else { u[i] = 0.0; } } // 迭代计算 for (int t = 1; t <= T; t++) { // 边界条件:固定浓度 u_new[0] = u[0]; u_new[N] = u[N]; // 内部节点计算 for (int i = 1; i < N; i++) { u_new[i] = u[i] + alpha * dt / (dx*dx) * (u[i+1] - 2*u[i] + u[i-1]); } // 更新浓度分布 for (int i = 0; i <= N; i++) { u[i] = u_new[i]; } printGrid(u); } return 0; }