% 参数设置
x0=0; % x起点
y0=0; % y起点
Lx = 1; % x方向长度
Ly = 1; % y方向长度
Nx = 100; % x方向网格数
Ny = 100; % y方向网格数
dx = (Lx-x0) / Nx; % x方向步长
dy = (Ly-y0) / Ny; % y方向步长
alpha = 0.01; % 热扩散率
dt = 0.01; % 时间步长
T = 1; % 总时间
nt = ceil(T / dt); % 时间步数
% 初始化温度矩阵
u = zeros(Nx+1, Ny+1);
% 初始条件,例如中间高温,周围低温
u(Nx/2+1, Ny/2+1) = 100;
% 边界条件,这里假设边界保持0度
u(:, 1) = 0; u(:, Ny+1) = 0;
u(1, :) = 0; u(Nx+1, :) = 0;
% 显式有限差分求解
for t = 1:nt
u_new = u; % 复制当前温度场
% 内部网格点更新
for i = 2:Nx
for j = 2:Ny
u_new(i,j)=u(i,j)+alpha*dt/(dx^2+dy^2)*(u(i+1,j)+u(i-1,j)+u(i,j+1)+u(i,j-1)-4*u(i,j));
end
end
% 更新温度场
u = u_new;
% 可选:输出或可视化
if mod(t, 10) == 0
figure;
surf(linspace(0, Lx, Nx+1), linspace(0, Ly, Ny+1), u');
shading interp;
title(sprintf('Time step %d', t));
drawnow;
end
end