数值稳定的计算程序米= B一种− 1乙M=BA−1B

计算科学 矩阵 拉帕克 矩阵分解
2021-11-28 21:29:36

而不是

  1. gesv -> 解决AX=B
  2. gemm -> 计算M=BX,

不知何故,我觉得有更好的计算方法M与 lapack/mkl?

2个回答

如果数值稳定性和鲁棒性是您唯一关心的问题,您可以尝试计算 SVDA,并使用它来计算产品。具体来说,让 SVDA是:

A=UΣVT.
然后
BA1B=(BV)Σ1(UTB).
这甚至可能在以下情况下起作用A是病态的,但是BA1B不是,由于其上的空间BBT跨度,以及它们与主要子空间的相互作用A. 如果它失败了,你可以根据正在放大的模式查看它究竟是如何失败的,然后决定从那里做什么。

当然,计算 SVD 非常昂贵。在这种情况下,请避免使用分而治之的 SVD 算法实现,因为这些算法虽然通常计算速度更快,但对于非常小的奇异值往往不太准确。

如果没有矩阵的特殊属性,您将无法进行智能分解或考虑对线性系统使用特殊的解析方法(例如,使用预处理技术的迭代方法来减轻病态,始终牢记 Wolfgang Bangerth 的评论)。

考虑到您有时会遇到的 Toepliz 矩阵。从与数字库更相关的角度来看,直到 2013 年初,lapack 肯定没有为 Toepliz 矩阵提供特殊功能,请参阅lapack 档案现在我也没有找到专用功能。关于 mkl 我不知道 Toepliz 矩阵的特殊功能。

也许Netlib 的这些功能(所以我们仍然在类似于 lapack/mkl 的环境中)对 Toepliz 矩阵有用。