2016-09-15 6 views
0

私はこのコードをLU分解に使用しますが、LとUの行列式を入れて、出力がLUまたはPLUの行列式の行列式になるようにします。MATLAB:LU分解に行列式を含める方法

function [ P, L, U ] = LUdecomposition(A) 
    A=input('matrix A ='); 
    m = size(A); 
    n = m(1); 
    L = eye(n); 
    P = eye(n); 
    U = A; 
    for i=1:m(1) 
    if U(i,i)==0 
     maximum = max(abs(U(i:end,1))); 
     for k=1:n 
     if maximum == abs(U(k,i)) 
      temp = U(1,:); 
      U(1,:) = U(k,:); 
      U(k,:) = temp; 
      temp = P(:,1); 
      P(1,:) = P(k,:); 
      P(k,:) = temp; 
     end 
     end 
    end 
    if U(i,i)~=1 
     temp = eye(n); 
     temp(i,i)=U(i,i); 
     L = L * temp; 
     U(i,:) = U(i,:)/U(i,i); 
    end 
    if i~=m(1) 
     for j=i+1:length(U) 
     temp = eye(n); 
     temp(j,i) = U(j,i); 
     L = L * temp; 
     U(j,:) = U(j,:)-U(j,i)*U(i,:); 
     end 
    end 
    end 
    P = P'; 
end 
+0

行列式を含めることはどういう意味ですか?出力引数に追加することを意味しますか? – percusse

+0

私は出力をP = P 'にする代わりに、det(LU)として出力します。 – dupsy

+0

'function [P、L、U、detLU] = LU分解能(A)......... detLU = det(L * U)end' – percusse

答えて

0

LとUは三角行列です。したがって、それらの行列式は対角要素の積である。古典的なLU分解では、Lの対角要素は1であるため、det(L)= 1です。A = L * U => det(A)= det(L)* det(U)したがって、det(PLU)= +または - det(LU)。私はそれを理解する方法がわかりません:/

+0

はい、LとUは三角行列で、det(LU)= det(L)* det(U)ですが、これを上のコードにどのように含めるか – dupsy

関連する問題