3. 含内热源的热传导PINN建模
任务目标
在长度为 L=1.0 的细杆上,求解含均匀内热源的一维稳态热传导方程,温度边界固定为两端 T(0)=T(L)=0。使用物理信息神经网络(PINN)直接逼近温度分布 T(x),并对比有无内热源时的温度场差异。
控制方程与无量纲化
控制方程为:
k·d²T/dx² + q = 0, T(0)=T(L)=0
其中 k 为热导率,q 为体积内热源强度。取 k=1,定义无量纲热源 Q = q·L²/k。本案例取 Q=2,此时解析解为 T(x)=x(1-x)(对应 q=2),便于直接验证PINN精度。为分析热源影响,同时训练 Q=0(无热源,解析解 T=0)作为对照。
PINN结构与损失函数
神经网络 N(x;θ) 直接输出温度。总损失由三部分构成:
- 方程残差:在内部配点处计算
d²N/dx² + Q的均方误差; - 边界条件:
N(0)与N(1)应接近 0; - (可选)数据项:本案例为纯物理驱动,不使用任何温度测量数据。
关键完整代码(PyTorch实现)
import torch
import torch.nn as nn
import numpy as np
torch.manual_seed(42)
# 物理参数
L = 1.0
Q = 2.0 # 无量纲内热源强度(Q=0 时为无热源对照)
# 神经网络:输入 x,输出 T
class PINN(nn.Module):
def __init__(self):
super().__init__()
self.net = nn.Sequential(
nn.Linear(1, 20), nn.Tanh(),
nn.Linear(20, 20), nn.Tanh(),
nn.Linear(20, 20), nn.Tanh(),
nn.Linear(20, 1)
)
def forward(self, x):
return self.net(x)
model = PINN()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
# 配点:内部点 + 边界点
x_int = torch.linspace(0, L, 100, requires_grad=True).reshape(-1, 1)
x_bc = torch.tensor([[0.0], [L]])
def loss_fn():
# 方程残差(自动微分求二阶导)
T_int = model(x_int)
dT = torch.autograd.grad(T_int, x_int, grad_outputs=torch.ones_like(T_int), create_graph=True)[0]
d2T = torch.autograd.grad(dT, x_int, grad_outputs=torch.ones_like(dT), create_graph=True)[0]
f_res = d2T + Q
loss_pde = torch.mean(f_res**2)
# 边界条件
T_bc = model(x_bc)
loss_bc = torch.mean((T_bc - 0.0)**2)
return loss_pde + loss_bc
# 训练
for epoch in range(3000):
optimizer.zero_grad()
loss = loss_fn()
loss.backward()
optimizer.step()
if epoch % 500 == 0:
print(f"Epoch {epoch:4d}, Loss = {loss.item():.2e}")
# 验证:与解析解 T_analytic = x(1-x) 比较
x_test = torch.linspace(0, L, 50).reshape(-1, 1)
T_pred = model(x_test).detach().numpy().flatten()
T_analytic = (x_test.numpy().flatten() * (1 - x_test.numpy().flatten())) * (Q / 2.0)
err = np.max(np.abs(T_pred - T_analytic))
print(f"最大误差 vs 解析解: {err:.2e}")
运行方式与依赖
需要 torch 和 numpy。直接运行上述脚本即可完成训练与验证。若需对照无热源情形,将 Q 改为 0.0 重新运行。
验证方法与判定标准
- 损失收敛:训练结束时总损失应降至
1e-5以下(Q=2时); - 解析解对比:Q=2 时,程序输出的最大误差应小于
1e-3,证明PINN正确求解了含内热源方程; - 热源影响分析:对比 Q=0 与 Q=2 的预测曲线,Q=2 时温度呈上凸抛物线分布,峰值在
x=0.5处约为0.25;Q=0 时温度恒为 0,说明内热源是温度场的唯一驱动力。
热源对温度场的影响
由方程 d²T/dx² = -Q 可知,内热源使温度分布呈抛物线形,且峰值与 Q 成正比。无热源时,在零边界条件下温度全场为 0;加入热源后,热量在内部产生并向两端低温边界传导,形成中部高、两端低的稳态分布。PINN 无需网格划分即可自动捕捉这一物理规律。
上图对比了两种工况下的稳态温度分布。内热源的存在使温度从零边界线性导热情形变为抛物线分布,峰值位于中心且数值等于 Q/8(本例为 0.25)。该结果与解析解完全一致,验证了PINN对含源项热传导方程的处理能力。