一维扩散方程求解器 返回
数值分析工具

一维扩散方程求解器

使用Crank-Nicolson法稳定求解 $\partial u/\partial t = D \cdot \partial^2 u/\partial x^2$。自由设置初始条件、边界条件并通过动画验证。

参数设置
扩散系数 D (×10⁻⁵ m²/s)
×10⁻⁵
域长 L (m)
m
格点数 N
初始条件
边界条件
计算结果
0.00s
经过时间 t
0.000
傅里叶数 Fo
1.000
最大值 u_max
1.000
能量 E(t)
1.00
域长 L
差分
快照
能量守恒变化
理论·主要公式
$$\frac{u_i^{n+1}-u_i^n}{\Delta t}=\frac{D}{2}\left(\delta^2_x u_i^{n+1}+\delta^2_x u_i^n\right)$$ 无条件稳定·2阶精度。使用Thomas算法(三对角矩阵)在每个时刻高速求解。扩散时间尺度:$t^* = L^2/D$

一维扩散方程求解器是什么

🙋
扩散方程在教科书里见过,但实际上能用它计算什么呢?
🎓
简单来说,就是计算"某种物质如何向外扩散"的过程。比如说,在一杯水里滴一滴墨水,墨水会逐渐扩散开来。这个模拟器就能重现这样的现象。你可以在上面选择初始条件为"高斯分布",然后移动"扩散系数 D"的滑块,立刻就能看到扩散速度是如何变化的。
🙋
那"边界条件"是什么意思?"Dirichlet"和"Neumann"听起来很复杂…
🎓
在实际工程中,如何处理区域的边缘非常重要。"Dirichlet"是指固定边界的数值。比如说,金属棒两端总是用冰冷却,保持在0℃,这就是Dirichlet条件。"Neumann"是指固定边界的流量。绝热状态(热量不流动)就是一个例子。你可以在模拟器中切换这些条件,看看分布如何改变。
🙋
"Crank-Nicolson法"是什么方法?和其他计算方法有什么区别?
🎓
在CAE工程实践中,这是一个在稳定性和精度之间取得很好平衡的优秀方法。简单说,它是把前一时刻和现在时刻的计算"各取一半"混合在一起。这样做的好处是,即使时间步长 $\Delta t$ 设得很大,计算也不容易发散(无条件稳定),而且精度很高。这个工具的幕后使用"Thomas算法"这样的超快速算法来求解由这个方法产生的方程。

常见问题

边界条件可以从"Dirichlet条件(固定值)"和"Neumann条件(梯度固定)"两种中选择。可以在左端和右端分别独立设置,例如左端固定在温度100℃,右端设为绝热(梯度为0)等。输入数值后,请按"更新条件"按钮。
虽然Crank-Nicolson法是无条件稳定的,但如果扩散系数D太大、时间步长dt相对于空间刻度dx太大,或初始条件有很陡峭的变化,可能会出现数值振荡。先尝试缩小dt(例如从0.01改为0.001)。如果仍然发散,试试把D的值降低一个数量级。
由于控制方程的形式相同,可以应用于物质扩散(例如墨水在水中扩散)、生物种群分散、半导体中的载流子扩散、地下水污染物的扩散等。只需将物理量u的单位和扩散系数D的数值调整为目标现象即可进行类似的模拟。
目前仅支持图表显示和动画播放。但是,屏幕上的图表可以通过右键点击来保存为图像。如果需要数值数据,可以记下初始条件和参数,用Excel等工具重新计算,或者期待今后的功能更新。

现实世界的应用

热工程(热传导分析):用于预测发动机缸体或制动盘内部温度分布随时间的变化。这是CAE分析中进行材料热应力和耐久性评估的基础数据。

化学工程·材料工程(物质扩散):应用于半导体制造工艺中掺杂物(杂质)的扩散预测、金属表面渗碳处理中碳浓度的渗透深度计算等。

环保工程:用于模拟地下水和土壤中污染物的扩散和迁移,帮助预测污染范围和制定净化方案。

金融工程:用于期权价格评估的Black-Scholes方程本质上是扩散方程的一种(对数收益率的扩散)。这个工具所学的数值解法是其理论基础。

常见误解和注意事项

刚开始用这个工具时,容易遇到几个问题。首先是"扩散系数D的现实感"。教科书经常用D=1.0进行计算,但现实中的数值跨度很大。例如,空气中水蒸气的扩散系数约为2.5e-5 m²/s,钢材的热扩散率约为1e-5 m²/s。如果在模拟器中设D=1,会看到扩散速度快得惊人,这是因为没有考虑"尺度感"。应用到实际问题时,要结合域的长度L和时间尺度,关注无量纲数傅里叶数 $F_o = D \Delta t / (\Delta x)^2$。Crank-Nicolson法虽然无条件稳定,但为了保证精度,应将 $F_o$ 控制在适度水平(例如不超过10)。

其次是"Neumann边界条件=0的真实含义"。表示绝热或物质无流动确实没错,但它的数学意义是"梯度为0",即分布曲线在边界处是平坦的。所以如果初始分布在边界处有值,那个地方就再也动不了。例如,金属棒中心加热,两端绝热,热量到达端部后无法散去,最终整体会达到均匀温度。别把它和Dirichlet条件(固定值)混淆了。

最后是"数值扩散和振荡"的陷阱。虽然这个求解器很优秀,但初始条件有急峻变化(如阶跃函数)时,计算上会有轻微的"模糊"或早期时间步的微弱振荡。这是离散化带来的不可避免的现象,但可以通过加细网格(减小Δx)来缓解。在工程实践中,养成"计算结果是不是太光滑?"的习惯,检查网格依赖性。

使用指南

  1. 输入扩散系数D(m²/s)和域长L(m)。例如,钢材热扩散率D=1.2×10⁻⁵m²/s,L=0.1m
  2. 指定网格分割数Ngrid(推荐50~200)。自动计算满足Courant数Fo=Ddt/dx²≤0.5的时间步长dt
  3. 设置初始条件(例如左端固定100℃,右端固定0℃)和边界条件后启动模拟。通过动画显示观察温度分布的时间演变

具体计算示例

铜管(D=1.17×10⁻⁴m²/s)长度L=1.0m、格点数Ngrid=100的情况,用Crank-Nicolson法在dx=0.01m、傅里叶数Fo=0.45时可得到稳定解。初始条件u(x,0)=100sin(πx)时,t=10s(无量纲时间Fo≈4.7)时最大值u_max≈8.2℃。此时整个域的能量E(t)从初值下降约92%

工程应用中的注意事项