一维热方程解 (x, t)

计算科学 pde 数值分析 Python
2021-11-30 11:04:46

我们目前正在求解热方程,作为课堂 PDE 序列的一部分。

我们得到了公式:

T(i,n+1)=T(i,n)+α[T(i+1,n)2T(i,n)+T(i1,n)Δx2]Δt
我已经处理了边界条件。他们不是问题。

这里的问题是,如果有人注意到,α,Δx2, 和Δt在整个迭代次数中都是永久常数。因此,它们可以被预先评估。只有一个问题,如果αΔtΔx2变得大于 0.5,我开始遇到方程本身的问题。可以看到,当该项 = 0.5 时:

10000001005000010050250010067.52512.50

在这里,每一行代表一个新的时间实例,每一列都是沿着我正在考虑的“细杆”的一个新的离散 x 位置元素。

那一刻αΔtΔx2低于 0.5,然而,我们是“好”的,这意味着这个问题不再发生,但是通过“细棒”的温度传播仍然非常缓慢,即使一端的温度非常高,并且保持恒定.

提供的方程式是否错误?还是我误解了什么?某处的标志有错误吗?

编辑:这确实是一个课堂作业,但考虑到情况的性质,我倾向于认为要么是我的理解存在根本缺陷(除了代码之外,只是概念),要么我只是被错误地给予了方程。

编辑 2:评估矩阵时出错。更正了。

2个回答

您偶然发现了显式方案的一个常见问题。这是数值分析的常见问题,称为 Courant–Friedrichs–Lewy (CFL) 条件 ( https://en.wikipedia.org/wiki/Courant%E2%80%93Friedrichs%E2%80%93Lewy_condition )。

简而言之,你必须调整你的时间步长和空间离散化以满足这个条件,这在很大程度上取决于物理情况。通常,会调整时间步长,因为自适应网格划分(或重新划分网格并映射您的解决方案)有些昂贵。

从概念上讲,出现这种情况是因为节点之间的“通信”变得比解决方案的“运动”慢得多。这意味着温度,让我们考虑声子的扩散以进行更物理的概念化,每个时间步长在多个单元上移动。您想要的是这样一个条件,即声子在多个时间步长内穿过一个单元。

CFL 条件仅是显式数值方案的必要条件,并且是对流和扩散问题的必要条件。

你忘记了一步。

方程是:

T(i,n+1)=T(i,n)+α[T(i+1,n)2T(i,n)+T(i1,n)Δx2]Δt

你正在评估:

T(i,n+1)=α[T(i+1,n)2T(i,n)+T(i1,n)Δx2]Δt