为 PDE 系统自动生成有限差分矩阵

计算科学 pde matlab 有限差分
2021-12-03 11:59:16

假设您有一个 PDE 系统要求解。至少为了简单起见,让我们假设它是时间无关的、准线性的(其导数是线性的),在 (x,y) 空间中的矩形网格上求解,并且周围都指定了边界条件。我的问题更笼统,但让我们从这里开始。

可能有两个因变量一般方程可能为:u(x,y)v(x,y)

a(x,y)Yxx+b(x,y)Yyy+cYxy+d(x,y)Yx+e(x,y)Yy=f(x,y,Y)

的所有函数都是 2x2 矩阵,是 2x1 矩阵,aefY

Y(x,y)=(u(x,y)v(x,y))

假设您想计算一个有限差分数值逼近。假设网格点在 x 和 y 上均匀分布。您可以将离散为个点,离散为个点。然后您将构建一个解决方案作为 2(nm) 列向量。xNyM

X=(u11un1unmv11vnm)

然后,您将求解某种矩阵方程

(A+B+C+D+E)X=b,

其中 2nm x 2nm 矩阵是对应微分算子的有限差分矩阵。括号中的组合矩阵将具有某种块状带状结构。由于边界条件,它们的边缘值可能很复杂。AE

我的问题很简单:是否有一种简单的方法(特别是在Matlab中)来生成矩阵或者至少,一个创建所有必要矩阵的简单指南(除了边界条件所需的修改,这可能是手动输入)。AE

问题是我可以手动完成,但它(i)很多代数;(ii) 在实施时会遇到很多错别字和错误。

例如,是一个代码,它为您提供了用于不同阶导数的一维有限差分“矩阵”的所有必要向量。飞机上的 PDE 系统有类比吗?

1个回答

我不知道有任何简单的解决方案,但使用 Maple 或Maxima等符号计算包自动执行此操作并不难您可以在此处看到将这种想法应用于一维扩散方程的示例。

特别是,您需要函数LinearAlgebra[GenerateMatrix](在 Maple 中)或augcoefmatrix(在 Maxima 中)。MATLAB 有一个符号计算工具箱,我认为它也可以用于此目的。

关于实现自动化,您可以使用CodeGenerationMaple 中的模块来输出 MATLAB 代码,或者使用 Maxima 中的grindandfortran函数来产生接近 MATLAB 的输出。