簡體   English   中英

MatLab-查找矩陣逆的算法

[英]MatLab - algorithm for finding inverse of matrix

我正在嘗試在MatLab中編寫一個算法,將下三角矩陣作為輸入。 輸出應為該矩陣的逆矩陣(也應為下三角形式)。 我幾乎設法解決了這個問題,但是我算法的一部分仍然讓我撓頭。 到目前為止,我有:

function AI = inverse(A)
n = length(A);
I = eye(n);
AI = zeros(n);
for k = 1:n
    AI(k,k) = (I(k,k) - A(k,1:(k-1))*AI(1:(k-1),k))/A(k,k);
    for i = k+1:n
        AI(i,k) = (I(i,k) - (??????????????))/A(i,i);
    end
end

我用問號標記了我不確定的部分。 我試圖通過在紙上寫出程序來為代碼的這一部分找到一種模式,但是我似乎找不到解決這一部分的正確方法。

如果有人可以幫助我,我將非常感謝!

這是我的代碼,通過使用行變換來獲得下三角矩陣的逆:

function AI = inverse(A)
    len = length(A);
    I  = eye(len);
    M  = [A I];
    for row = 1:len
        M(row,:) = M(row,:)/M(row,row);
        for idx = 1:row-1
            M(row,:) = M(row,:) - M(idx,:)*M(row,idx);
        end
    end
    AI = M(:,len+1:end);
end

您可以在Octave的source上看到它是如何完成 根據矩陣的類別,這似乎在不同的地方實現。 對於Float類型對角矩陣,它位於liboctave/array/fDiagMatrix.cc ;對於復雜對角矩陣,它位於liboctave/array/CDiagMatrix.cc等上...

自由(如自由)軟件的優點之一是您可以自由地研究事物的實現方式;)

感謝所有的投入! 考慮到輸入是一個較低的三角矩陣,實際上,今天我能夠找到一種非常好用的簡便方法來解決此問題:

function AI = inverse(A)
n = length(A);
I = eye(n);
AI = zeros(n);
for k = 1:n
    for i = 1:n
        AI(k,i) = (I(k,i) - A(k,1:(k-1))*AI(1:(k-1),i))/A(k,k);
    end
end

暫無
暫無

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

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