2015-04-04 113 views
-3

這是我的LU分解CROUT方法代碼:LU分解CROUT減少

function [L, U] = croutreduction(A) 
    [row,column]=size(A); 
    L=eye(row,column); 

    //A = 3x3 
    if row==3 then 
     U(1,1)=A(1,1); U(1,2)=A(1,2); U(1,3)=A(1,3); 
     L(2,1)=A(2,1)/U(1,1); L(3,1)=A(3,1)/U(1,1); 

     U(2,2)=A(2,2)-L(2,1)*U(1,2); 
     U(2,3)=A(2,3)-L(2,1)*U(1,3); 
     L(3,2)=A(3,2)/U(2,2); 

     U(3,3)=A(3,3)-L(3,2)*U(2,3);  
    end 

    //A = 4x4 
    if column==4 then 
     U(1,1)=A(1,1); U(1,2)=A(1,2); U(1,3)=A(1,3); U(1,4)=A(1,4); 
     L(2,1)=A(2,1)/U(1,1); L(3,1)=A(3,1)/U(1,1); L(4,1)=A(4,1)/U(1,1); 

     U(2,2)=A(2,2)-L(2,1)*U(1,2); 
     U(2,3)=A(2,3)-L(2,1)*U(1,3); 
     U(2,4)=A(2,4)-L(2,1)*U(1,4); 
     L(3,2)=(A(3,2)-L(3,1)*U(1,2))/U(2,2); 
     L(4,2)=(A(4,2)-L(4,1)*U(1,2))/U(2,2); 

     U(3,3)=A(3,3)-(L(3,1)*U(1,3)+L(3,2)*U(2,3)); 
     U(3,4)=A(3,4)-(L(3,1)*U(1,4)+L(3,2)*U(2,4)); 
     L(4,3)=(A(4,3)-(L(4,1)*U(1,3)+L(4,2)*U(2,3)))/U(3,3); 

     U(4,4)=A(4,4)-(L(4,1)*U(1,4)+L(4,2)*U(2,4)+L(4,3)*U(3,4)); 
    end 
endfunction 

如何修改我的代碼具有不同尺寸的矩陣來工作?如您所見,上面的代碼僅適用於3x3和4x4矩陣。

+0

Crout縮減代碼是通過谷歌avaialbe和關於第一個問題,請嘗試做到這一點,並在您有任何問題和問題後,我們將更樂意幫助您 – madbitloman 2015-04-04 21:47:59

+0

您可以檢查我的新代碼? – 2015-04-06 16:33:15

+0

如果您有N維矩陣,我建議您將其重新整形爲正方形2D矩陣,然後執行反演,然後重新整形。 – madbitloman 2015-04-06 17:49:51

回答

1

您應該使用for循環代替硬編碼索引。在此基礎上例如:http://en.wikipedia.org/wiki/Crout_matrix_decomposition我修改的Scilab代碼(原代碼是對C和Matlab /八度):

function [L,U]=LUdecompCrout(A) 
    [r,c]=size(A); 
    for i=1:r 
    L(i,1)=A(i,1); 
    U(i,i)=1; 
    end 
    for j=2:r 
    U(1,j)=A(1,j)/L(1,1); 
    end 
    for i=2:r 
    for j=2:i 
     L(i,j)=A(i,j)-L(i,1:j-1)*U(1:j -1,j); 
    end 

    for j=i+1:r 
     U(i,j)=(A(i,j)-L(i,1:i-1)*U(1:i-1,j))/L(i,i); 
    end 
    end 
endfunction 

Hovewer這給了不同的結果,你的代碼,我沒有檢查哪一個是錯誤和其中...

+0

@Elra Ghifary此代碼適合您嗎? – Attila 2015-04-08 08:40:16