簡體   English   中英

是否有一種簡單的方法來反轉三角形(上部或下部)矩陣?

[英]Is there around a straightforward way to invert a triangular (upper or lower) matrix?

我正在嘗試實現一些基本的線性代數運算,其中一個操作是三角形(上部和/或下部)矩陣的反演。 有一個簡單而穩定的算法嗎?

謝謝。

是的,使用回替代 反轉矩陣的標准算法是找到它的LU分解(分解成下三角形和上三角矩陣),在三角形片上使用反向替換,然后組合結果以獲得原始矩陣的逆。

如果可以的話,不要顛倒它。 這是數值線性代數的基本誡命之一。

將矩陣L本身保持在存儲器和計算中要快得多且數值更穩定

inv(L)b
每當你需要用inv(L)做其他事情時,用后向替換。

請注意,反轉它的慣用算法需要求解系統

 inv(L)[1 0 0 ...], inv(L)[0 1 0 ....], inv(L)[0 0 1 ....] 
等等,所以你看它根本不容易反轉它。

給定較低的三角矩陣L,backsubstitution允許您為任何右側b快速求解系統L x = b。

要反轉L,您可以為右側求解此系統e1 =(1,0,...,0),e2 =(0,1,...,0),...,en =(0 ,0,...,1)並將得到的解向量組合成單個(必須是低三角形)矩陣。

如果你對封閉形式的解決方案感興趣,則逆的對角線元素是原始對角線元素的反轉,當你離開對角線時,逆向元素的其余元素的公式變得越來越復雜。

如果您正在討論單精度實數,請查看LAPACK例程STRTRISTRTI2的源代碼。

哇,這幾乎是數值分析課程的一半內容。 標准算法將做到這一點,並有一堆罐頭代碼在這里 這個以及大多數其他常見數值分析問題的最終來源是Numerical Recipes

作為A的B逆,三角矩陣,您可以使用以下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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM