이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

pinv

무어-펜로즈 의사 역행렬

설명

예제

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

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

예제

모두 축소

선형 연립방정식에 대해, 백슬래시(\)를 사용하여 얻은 해와 pinv를 사용하여 얻은 해를 비교해 봅니다.

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

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

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에 대한 8x8 마방진의 합입니다. A가 여전히 8x8 행렬이었다면 x에 대한 해 하나는 1로 구성된 벡터일 것입니다. 6개 열만 사용할 경우, 방정식에 여전히 해가 존재하지만 해가 모두 1은 아닙니다. 행렬의 랭크가 낮기 때문에 무수히 많은 해가 있습니다.

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

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

    4.0000
    5.0000
         0
         0
         0
   -1.0000

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 = 6.4807
norm(x2)
ans = 3.2817

입력 인수

모두 축소

입력 행렬입니다.

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

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

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

예: pinv(A,1e-4)

세부 정보

모두 축소

무어-펜로즈 의사 역행렬

무어-펜로즈 의사 역행렬은 역행렬이 존재하지 않는 경우 부분적으로 역행렬과 유사한 역할을 할 수 있는 행렬입니다. 이 행렬은 시스템에 유일한 해가 없거나 해가 많을 때 선형 연립방정식의 해를 구하는 데 자주 사용됩니다.

임의의 행렬 A에 대해, A'와 차원이 같은 유일한 의사 역행렬 B가 존재합니다. A가 특이 행렬이 아니고 정사각 행렬인 경우, pinv(A)는 단순히 계산 비용이 많이 드는 inv(A) 계산 방법입니다. 하지만 A가 정사각 행렬이 아니거나, 정사각 행렬이고 특이 행렬이라면 inv(A)는 존재하지 않습니다. 이러한 경우, pinv(A)inv(A)의 속성 중 일부(전부는 아님)를 가집니다.

1.ABA=A2.BAB=B3.(AB)*=AB(ABHermitian)4.(BA)*=BA(BAHermitian)

의사 역행렬 계산은 svd(A)에 기반합니다. 계산은 tol보다 작은 특이값을 0으로 처리합니다.

  • pinv(A)*b와 같이, 벡터 b에 적용한 pinv를 많은 경우에 lsqminnorm(A,b)로 바꾸어 선형 연립방정식의 최소 노름 최소제곱해를 구할 수 있습니다. lsqminnorm은 일반적으로 pinv보다 효율적이고 희소 행렬도 지원합니다.

알고리즘

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

A=USV*=[U1U2][S1000][V1V2]*A=U1S1V1*.

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

B=V1S11U1*.

확장 기능

참고 항목

| | | | |

R2006a 이전에 개발됨