2013-06-09 5 views
1

안녕하세요 여러분, GEPP를 사용하여 행렬식 (이 부분은 이미 계산 한 것)과 역행렬을 계산할 프로그램을 작성하고 있습니다. 여기서 문제는 GEPP를 사용하여 행렬을 역행하는 방법을 완전히 알지 못하기 때문에 발생합니다. Gauss Elimination ([A | I] => [I | B])을 사용하여 역산하는 법을 알고 있습니다. 나는 인터넷을 통해 검색했지만 아직 단서가 없다. 나를 설명해 주시겠습니까? 여기Gaussian Elimination by Partial Pivoting에 의한 행렬 역함수 찾기

function [det1,X ] = gauss_czesciowy(A, b) 
%GEPP 
perm=0; 

n = length(b); 
if n~=m 
error('vector has wrong size'); 
end 
for j = 1:n 
    p=j; 
    % choice of main element 
    for i = j:n 
     if abs(A(i,j)) >= abs(A(p,j)) 
      p = i; 
     end 
    end 
    if A(p,j) == 0 
     error('Matrix A is singular'); 
    end 
    %rows permutation 
    t  = A(p,:); 
    A(p,:) = A(j,:); 
    A(j,:) = t; 
    t  = b(p); 
    b(p) = b(j); 
    b(j) = t; 
    if~(p==i) 
    perm=perm+1; 
    end 

    % reduction 
    for i = j+1:n 
     t  = (A(i,j)/A(j,j)); 
     A(i,:) = A(i,:)-A(j,:)*t; 
     b(i) = b(i)-b(j)*t; 
    end 
end 
%determinant 
mn=1; 
for i=1:n 
    mn=mn*A(i,i); 
end 
det1=mn*(-1)^perm; 
% solution 
X = zeros(1,n); 
X(n) = b(n)/A(n,n); 

if (det1~=0) 
for i = 1:n 
    s = sum(A(i, (i+1):n) .* X((i+1):n)); 
    X(i) = (b(i) - s)/A(i,i); 
end 
end 
end 
+0

부분)을 검색하면 http://math.stackexchange.com/이이 질문을하기에 더 좋은 장소 일 수 있습니다. –

답변

1

Guassian elimination with partial pivoting에 대한 알고리즘 :

여기가 AX = B 해결하고 결정은 계산 현재로서는, (아마도 누군가가 유용합니다) 내 MATLAB 코드입니다. 기본적으로 가우시안 제거는 평소대로 수행되지만 각 단계에서 행을 교환하여 사용 가능한 최대 피벗을 선택합니다.

역행렬을 얻으려면 행을 전환하는 방법을 추적하고 permutation matrix P을 만들어야합니다. 순열 행렬은 A 행렬과 동일한 크기의 항등 행렬이지만 동일한 행 스위치가 수행됩니다. 그렇다면 :

[A] --> GEPP --> [B] and [P] 

[A]^(-1) = [B]*[P] 

나는 이것을 꼭 몇 행렬로 시험해 봅니다.

편집 : 이것을 경험적으로 테스트하는 것이 아니라, 그 이유를 설명합시다. 기본적으로 무엇을 당신이 행을 전환 할 때 당신이하고있는 것은 당신이 당신은 당신이 GE를 시작하기 전에이 작업을 수행하고 동일한 결과를 끝낼 수 있었다 당신의 순열 행렬 P.하여 증식하는 것입니다, 이는 다음과 같습니다

[P*A|I] --> GE --> [I|B] or 
(P*A)^(-1) = B 

A^(-1) * P^(-1) = B 

그리고 당신은 얻을 오른쪽에 P에 의해 양쪽을 곱할 수 : 인해 역 동작의 속성이 다시 작성 될 수는 프로그래밍 알고리즘 (그리고하지 않으면

A^(-1) * P^(-1)*P = B*P 
A^(-1) * I = B*P 
A^(-1) = B*P 
+0

B가 무엇인가요? 행렬의 행 에셜론 형태? – e0n

+0

B는 일부 순열을 통해 A -> I를 얻은 후에 감소 된 행 에셜론이됩니다. 생각을 중심으로 행을 전환 했으므로 이것은 아직 귀하의 반대가 아닙니다. 모든 전환 작업을 취소하려면 순열 행렬을 곱해야합니다. – Engineero

+0

이 작품이 [A]^(- 1) = [B] * [P]로 작동하는지 확인 하시겠습니까? – e0n