热传导方程简介
热传导方程(Heat Equation)是描述热量在介质中传递的偏微分方程,其基本形式为:
\\frac{\\partial u}{\\partial t} = \\alpha \\nabla\^2 u
其中 ( u(x,t) ) 表示温度分布,( \alpha ) 为热扩散系数,( \nabla^2 ) 是拉普拉斯算子。
有限差分法求解
在MATLAB中,可通过有限差分法(FDM)离散求解热传导方程。以一维情况为例:
离散化方程
空间离散:( x_i = i\Delta x ),时间离散:( t_n = n\Delta t )。
采用显式欧拉格式:
u_i\^{n+1} = u_i\^n + \\frac{\\alpha \\Delta t}{(\\Delta x)\^2} (u_{i+1}\^n - 2u_i\^n + u_{i-1}\^n)
MATLAB代码实现
matlab
% 参数设置
L = 1; % 空间长度
T = 0.1; % 总时间
alpha = 0.01; % 热扩散系数
Nx = 50; % 空间网格数
Nt = 1000; % 时间步数
dx = L/Nx; % 空间步长
dt = T/Nt; % 时间步长
r = alpha*dt/dx^2;
% 初始条件(如高斯脉冲)
x = linspace(0, L, Nx+1);
u0 = exp(-100*(x-0.5).^2)';
% 显式迭代求解
u = u0;
for n = 1:Nt
u_new = u;
for i = 2:Nx
u_new(i) = u(i) + r*(u(i+1) - 2*u(i) + u(i-1));
end
u = u_new;
end
% 可视化
plot(x, u0, 'r--', x, u, 'b-');
legend('Initial', 'Final');
xlabel('x'); ylabel('Temperature');
使用PDE Toolbox求解
MATLAB的PDE Toolbox提供了更便捷的偏微分方程求解功能:
- 定义几何模型
matlab
model = createpde();
geometryFromEdges(model, @squareg);
- 设置方程参数
matlab
specifyCoefficients(model, 'm', 0, 'd', 1, 'c', alpha, 'a', 0, 'f', 0);
- 初始条件与边界条件
matlab
setInitialConditions(model, u0); % u0为初始温度分布
applyBoundaryCondition(model, 'dirichlet', 'Edge', 1:4, 'u', 0);
- 求解与可视化
matlab
result = solvepde(model, T);
pdeplot(model, 'XYData', result.NodalSolution);
隐式方法(Crank-Nicolson)
为提高稳定性,可采用隐式Crank-Nicolson格式:
离散方程
-\\frac{r}{2}u_{i-1}\^{n+1} + (1+r)u_i\^{n+1} - \\frac{r}{2}u_{i+1}\^{n+1} = \\frac{r}{2}u_{i-1}\^n + (1-r)u_i\^n + \\frac{r}{2}u_{i+1}\^n
MATLAB实现
需构建三对角矩阵并调用tridiag求解器,或直接使用稀疏矩阵求解:
matlab
A = gallery('tridiag', Nx-1, -r/2, 1+r, -r/2);
B = gallery('tridiag', Nx-1, r/2, 1-r, r/2);
for n = 1:Nt
u(2:Nx) = A \ (B * u(2:Nx));
end
注意事项
- 稳定性条件:显式方法需满足 ( \alpha \Delta t / (\Delta x)^2 \leq 0.5 )。
- 边界处理:Dirichlet边界直接赋值,Neumann边界需特殊处理。
- 高维扩展:二维/三维情况下需修改离散格式为对应的五点或七点差分格式。