范德蒙德矩阵的评估

计算科学 有限元 数值分析
2021-11-26 16:11:56

我想通过使用广义 Vandermonde 矩阵来构建有限元基础。这个想法是在参考空间中的一组点处计算合适的模态基(“素基”)的值,并将有限元基函数的值表示为素基成员的线性组合,如参考文献 [1] 或 [2]。

我有以下问题。三角形/四面体的主要选择基础是 Dubiner 基础并使用 Jacobi 多项式。当我评估这个基础时,Vandermonde 矩阵中的一些条目几乎为零(~ 10^-17),但看起来它们实际上应该完全为零。稍后,当我使用 Vandermonde 矩阵计算拉格朗日形状函数的值时,一些结果值再次受到轻微扰动。这样做的结果是,某些点的所有拉格朗日形函数之和不完全为 1,导数之和也不完全为 0。

我想知道是否有人遇到过这样的问题,是否有补救措施。我在书籍和谷歌上搜索,但没有成功。由于我想在 CFD 代码中使用高阶形状函数,我担心形状函数评估中的错误会引入不稳定性。

提供一些实现细节:我以两种不同的方式在 C++ 中实现了 Dubiner 模式的计算:

a) 如 [1] 和 [2] 中所述,使用 Jacobi 多项式的递归公式“直接”实现。由于折叠坐标变换中的奇点,这在参考三角形的顶点 (-1,1) 处会失败。

b) [3] 中描述的“解决方法”实现。根据本文的观察,b) 得到的误差略小于 a) 的情况。

[1] Jan S. Hesthaven,Tim Warburton:节点间断 Galerkin 方法:算法、分析和应用

[2] George Em Karniadakis、Spencer J. Sherwin:计算流体动力学的光谱/hp 元素方法

[3] Robert C. Kirby:折叠坐标正交多项式的无奇点评估

2个回答

告诉我们更多关于您选择插值点的信息可能会有所帮助。[1] 对点选择不当的条件问题进行了 1D 讨论;除非矩阵本身条件不佳或接近奇异,否则接近于零的项通常不是问题。Warburton 有一篇关于 2D 和 3D 插值点的最佳选择的论文,我认为 Trilinos 库基于其高阶拉格朗日形状函数。

如果这不是问题,您始终可以通过切换到简单测试用例的模式表示来进行检查。您的“稍微偏离”节点多项式本身可以被视为基函数,并且大多数 Galerkin 方案对基函数的选择是不可知的。如果您尝试了模态和节点方法,您可以看到不精确的节点是否会导致不稳定。

由于数值四舍五入,这种情况一直发生并且无法避免。在 deal.II 中,我们通常只设置小元素(相对于一些容差,比如说1014) 归零并重新缩放矩阵行或列,如果我们知道它们的总和应该为 1。