주요 콘텐츠

pinv

R2026b

무어-펜로즈 의사 역행렬

설명

B = pinv(A)는 행렬 A의 무어-펜로즈 의사 역행렬을 반환합니다.

예제

B = pinv(A,tol)은 허용오차에 대한 값을 지정합니다. pinv에서는 허용오차보다 작거나 같은 A의 특이값을 0으로 처리합니다.

예제

모두 축소

백슬래시(\), pinv 및 lsqminnorm을 사용하여 얻은 선형 연립방정식의 해들을 비교해 봅니다.

사각 계수 행렬 A의 랭크가 낮은 경우, norm(A*x-b)를 최소화하는 최소제곱 문제는 무한히 많은 해를 가집니다. 두 해가 x1 = A\b와 x2 = pinv(A)*b에서 반환됩니다. 이러한 해가 갖는 속성의 특징적인 차이점은, x1은 rank(A)만큼의 0이 아닌 성분만 가지고 norm(x2)는 다른 어떤 해의 노름보다도 작다는 것입니다.

rank(A) = 3인 8×6 행렬을 만듭니다.

A = magic(8); 
A = A(:,1:6) 
A = 8×6

    64     2     3    61    60     6
     9    55    54    12    13    51
    17    47    46    20    21    43
    40    26    27    37    36    30
    32    34    35    29    28    38
    41    23    22    44    45    19
    49    15    14    52    53    11
     8    58    59     5     4    62

연립방정식의 우변에 해당하는 벡터를 만듭니다.

b = 260*ones(8,1)
b = 8×1

   260
   260
   260
   260
   260
   260
   260
   260

우변 값으로 선택된 숫자 260은 A에 대한 8×8 마방진의 합입니다. A가 여전히 8×8 행렬이었다면 x에 대한 해 하나는 1로 구성된 벡터일 것입니다. 6개 열만 사용할 경우, 방정식에 여전히 해가 존재하지만 해가 모두 1은 아닙니다. 행렬의 랭크가 낮기 때문에 무수히 많은 해가 있습니다.

백슬래시와 pinv를 사용하여 두 개의 해를 구합니다.

x1 = A\b
Warning: Rank deficient, rank = 3, tol =  1.882938e-13.
x1 = 6×1

    3.0000
    4.0000
         0
         0
    1.0000
         0

x2 = pinv(A)*b
x2 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

norm(A*x1-b)와 norm(A*x2-b)가 반올림 오차 정도의 차이만 있다는 점에서 두 해 모두 정확합니다. 해 x1은 0이 아닌 요소가 3개만 있기 때문에 특별합니다. norm(x2)가 norm(x1)을 포함해 다른 어떤 해의 노름보다도 작기 때문에 해 x2는 특별합니다.

norm(x1)
ans = 
5.0990
norm(x2)
ans = 
3.2817

lsqminnorm을 사용하여 이 문제의 최소제곱해를 계산하는 경우 pinv를 사용한 것과 동일한 해를 얻게 됩니다. 일반적으로 lsqminnorm(A,b)가 pinv(A)*b보다 더 효율적입니다.

x3 = lsqminnorm(A,b)
x3 = 6×1

    1.1538
    1.4615
    1.3846
    1.3846
    1.4615
    1.1538

norm(x3)
ans = 
3.2817

입력 인수

모두 축소

입력 행렬입니다.

데이터형: single | double
복소수 지원 여부: 예

특이값 허용오차로, 스칼라로 지정됩니다. pinv는 의사 역행렬 계산 중 tol보다 작거나 같은 특이값을 0으로 처리합니다.

디폴트 허용오차는 max(size(A))*eps(norm(A))입니다.

예: pinv(A,1e-4)

세부 정보

모두 축소

팁

  • pinv(A)*b와 같이, 벡터 b에 적용한 pinv를 많은 경우에 lsqminnorm(A,b)로 바꾸어 선형 연립방정식의 최소 노름 최소제곱해를 구할 수 있습니다. 예를 들어, 의사 역행렬을 사용하여 선형 연립방정식의 해 구하기에서 lsqminnorm을 사용하면 pinv를 사용한 것과 동일한 해를 얻게 됩니다. lsqminnorm은 A의 COD(Complete Orthogonal Decomposition)를 사용하여 낮은 랭크 근삿값을 구하고 해당 인수를 b에 적용하기 때문에 일반적으로 lsqminnorm이 pinv보다 더 효율적입니다. 반면, pinv는 특이값 분해를 사용하여 A의 의사 역행렬을 명시적으로 생성합니다. 그러면 이 의사 역행렬에 b를 곱해야 합니다. lsqminnorm은 희소 행렬도 지원합니다.

알고리즘

pinv는 특이값 분해를 사용하여 A의 의사 역행렬을 생성합니다. S의 대각선을 따라서 tol보다 작거나 같은 특이값은 0으로 처리되고, A는 다음과 같이 표현됩니다.

A=USV*=[U1  U2][S1000][V1  V2]*A=U1S1V1* .

A의 의사 역행렬은 다음과 같습니다.

B=V1S1−1U1* .

확장 기능

모두 확장

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| | | | |