我正在尝试实现一些基本的线性代数运算,其中一个运算是三角形(上部和/或下部)矩阵的反演。有没有一个简单而稳定的算法呢?

谢谢。

有帮助吗?

解决方案

是的,请使用返回替换。反转矩阵的标准算法是找到它的LU分解(分解成下三角形和上三角矩阵),在三角形片上使用反向替换,然后组合结果以获得原始矩阵的逆。

其他提示

如果可以的话,不要颠倒它。这是数值线性代数的基本诫命之一。

将矩阵L本身保留在内存中,并且只要你需要用inv(L)做其他事情就用后向替换来计算

inv(L)b
,速度和数值更稳定。

请注意,用于反转它的惯用算法需要求解系统

inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
等等,因此您可以更容易地反转它。

给定较低的三角矩阵L,backsubstitution允许您解决系统 L x = b 快速为任何右手b。

要反转L,您可以为右侧求解此系统e1 =(1,0,...,0),e2 =(0,1,...,0),...,en =(0,0,...,1)并将得到的解向量组合成单个(必须是低三角形)矩阵。

如果你对封闭形式的解决方案感兴趣,那么逆的对角线元素是原始对角线元素的逆,当你离开时,逆的其余元素的公式变得越来越复杂从对角线。

如果您正在讨论单精度实数,请查看LAPACK例程的源代码 STRTRI STRTI2

哇,这几乎是数值分析课程的一半内容。标准算法会做到这一点,并且有一堆固定代码这里 。这个以及大多数其他常见数值分析问题的最终来源是 Numerical Recipes

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top