我想通过使用广义 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:折叠坐标正交多项式的无奇点评估