对给定方程的线法和龙格-库塔法的实现

计算科学 pde 有限差分 龙格库塔 线法
2021-12-27 04:30:36

d2udx2+Ad2dx2(dudt)=B

我想解决上面给出的方程。我需要首先通过线法对其进行离散化,然后使用龙格-库塔法演化生成的 ODE。我的问题是,如何将这个特殊方程简化为两个不同的 ODE?

2个回答

您可以将方程转换为以下两个 PDE 系统

ut=v
0=2ux2+A2vx2B

现在有两个因变量uv

空间维度上的离散化(即线法(MOL))很简单;中心差异将起作用。得到的方程组是微分代数方程组 (DAE) 而不是 ODE。有许多可用的方法来解决 DAE,但通常不使用显式方法,如经典的 Runge-Kutta。

一个广泛使用的 DAE 求解器是来自 Sundials 套件的IDA 。另一个广受好评的 DAE 求解器是隐式 Runge-Kutta 求解器 RADAU5如果您决定编写自己的解决方案,最基本的隐式 ODE 求解器(反向 Euler)也可能会求解此 DAE 系统,但当然需要相对较小的时间步才能获得准确的求解。

最后,如果您可以使用 Matlab 或 Octave,则可以使用 1D PDE 求解器来求解这两个方程,并让您避免编写自己的 MOL 解决方案的困难。

例如,如果您使用以下方案,您应该能够建立一个方程组来求解时间导数:

A2x2(uit)=B2uix2AΔx2ui1t2AΔx2uit+AΔx2ui+1tBui12ui+ui+1Δx2Aui1t2Auit+Aui+1tBΔx2(ui12ui+ui+1)

其中是某个时间在第空间离散位置处的解,并且该方程适用于所有离散位置。编写完最终方程后,您应该能够将应该是三对角方程组的东西放在一起,这样您就可以获得时间导数的值。uiith