|
@@ -0,0 +1,52 @@
|
|
|
+#include <stdio.h>
|
|
|
+
|
|
|
+#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;
|
|
|
+}
|
|
|
+
|