C++ 有没有一种简单的方法来反转三角形(上或下)矩阵?

C++ 有没有一种简单的方法来反转三角形(上或下)矩阵?,c++,math,matrix,linear-algebra,triangular,C++,Math,Matrix,Linear Algebra,Triangular,我正在尝试实现一些基本的线性代数运算,其中一个运算是三角形(上和/或下)矩阵的求逆。有没有一个简单而稳定的算法可以做到这一点 谢谢。是的,请使用。矩阵求逆的标准算法是找到其LU分解(分解为下三角矩阵和上三角矩阵),在三角片上使用反代换,然后组合结果以获得原始矩阵的逆。如果您谈论的是单精度实数,看看LAPACK例程的源代码。哇,这几乎是数值分析课程内容的一半。标准算法可以做到这一点,并且有一堆固定的代码。这个问题和大多数其他常见的数值分析问题的最终来源是。给定一个下三角矩阵L,反置换允许您求解系统

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


谢谢。

是的,请使用。矩阵求逆的标准算法是找到其LU分解(分解为下三角矩阵和上三角矩阵),在三角片上使用反代换,然后组合结果以获得原始矩阵的逆。

如果您谈论的是单精度实数,看看LAPACK例程的源代码。

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

给定一个下三角矩阵L,反置换允许您求解系统 Lx=b 快速移动到任何右侧b

要反转L,您可以为右侧e1=(1,0,…,0),e2=(0,1,…,0),…,en=(0,0,…,1)求解此系统,并将所得解向量合并到单个(必要的下三角)矩阵中


如果您对封闭形式的解感兴趣,则逆矩阵的对角元素是原始对角元素的逆矩阵,并且逆矩阵其余元素的公式随着您从对角点移开而变得越来越复杂。

如果可以,请不要将其反转。这是数值线性代数的基本法则之一

将矩阵L本身保存在内存中,并在需要对inv(L)执行其他操作时使用回代进行计算,速度更快,数值更稳定

inv(L)b

请注意,求逆的常用算法需要求解系统等,因此您会发现根本不求逆要容易得多。

作为三角形矩阵A的B逆,您可以使用以下MATLAB代码:

inv(L)[1 0 0 ...],
inv(L)[0 1 0 ....],
inv(L)[0 0 1 ....]
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

我想得到三角形矩阵的逆矩阵,而不是正方形矩阵。反代换如何帮助我获得三角形的逆矩阵?根据定义,三角形矩阵是正方形的。而且,只有正方形矩阵才有逆矩阵。反三角形矩阵不是数值分析课程的一半内容。求一个三角矩阵的逆是很简单的,而且朴素的算法是稳定的。必须做行旋转。天真是不稳定的。旋转(比如说,高斯消去法)将线性系统转化为三角形,然后用反置换法求解。至于稳定性,请参阅尼古拉斯·海厄姆(Nicholas Higham)的《数值算法的准确性和稳定性》一书,第二版第140页