是否有一种简单的方法来转置一个三角形矩阵(上三角或下三角)?

13

我正在尝试实现一些基本的线性代数运算,其中之一就是一个上(下)三角矩阵的求逆运算。有没有简单且稳定的算法可以做到这一点?

谢谢。


请看这篇文章:http://math.stackexchange.com/questions/1143214/method-to-find-the-inverse-of-any-lower-triangular-matrix祝好 - Dade
6个回答

17

是的,使用回代法。 一个标准的矩阵求逆算法是先找到其LU分解(分解成下三角矩阵和上三角矩阵),在三角形部分上使用回代法,然后将结果组合以获得原始矩阵的逆。


我正在尝试获取一个三角形矩阵的逆,而不是一个方阵。回代法如何帮助我获得三角形矩阵的逆? - tunnuz
14
根据定义,三角矩阵是方阵。 - jason
3
此外,只有方阵才有逆矩阵。 - conjectures

10
不要反转它,如果可以的话。这是数值线性代数的基本戒律之一。

It is much faster and numerically stabler to keep the matrix L itself in memory and compute

inv(L)b
with back-substitution whenever you need to do something else with inv(L).

Note that the customary algorithm for inverting it requires solving the systems

inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
and so on, so you see it is much easier not to invert it at all.


3
给定一个下三角矩阵L,回代法允许您快速地解决任何右侧b的系统L x = b。
要求L的逆矩阵,您可以为右侧e1=(1,0,...,0), e2=(0,1,...,0), ..., en=(0,0,...,1)求解此系统,并将结果向量组合成单个(必然是下三角形)矩阵。
如果您对闭合形式的解感兴趣,则逆矩阵的对角线元素是原始对角线元素的倒数,而离对角线越远,逆矩阵的其余元素的公式变得越来越复杂。

2

如果你在讨论单精度实数,可以查看LAPACK例程STRTRISTRTI2的源代码。


1

假设B是A的逆三角矩阵,您可以使用以下MATLAB代码:

n = size(A,1);
B = zeros(n);
for i=1:n
    B(i,i) = 1/A(i,i);
    for j=1:i-1
        s = 0;
        for k=j:i-1
            s = s + A(i,k)*B(k,j);
        end
        B(i,j) = -s*B(i,i);
    end
end

-2

哇,这几乎是数值分析课程一半的内容了。标准算法可以解决它,这里有一堆现成的代码在这里。对于这个和大多数其他常见的数值分析问题,最终的来源是《Numerical Recipes》


3
反转一个上(下)三角矩阵并不占据数值分析课程的一半内容。反转一个上(下)三角矩阵是微不足道的,而且朴素算法是稳定的。 - jason
1
必须进行行交换。天真的方法不会稳定。 - duffymo
3
通过行列变换 (例如高斯消元),可以将线性系统转化为三角形式,然后通过回代法求解。至于稳定性,可以参考Nicholas Higham的书《Numerical Algorithms的精度和稳定性》,第二版的第140页。 - jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接