이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
pinv
무어-펜로즈 의사 역행렬
설명
B = pinv(
는 행렬 A
)A
의 무어-펜로즈 의사 역행렬을 반환합니다.
예제
의사 역행렬을 사용하여 선형 연립방정식의 해 구하기
선형 연립방정식에 대해, 백슬래시(\
)를 사용하여 얻은 해와 pinv
를 사용하여 얻은 해를 비교해 봅니다.
사각 계수 행렬 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
입력 인수
A
— 입력 행렬
행렬
입력 행렬입니다.
데이터형: single
| double
복소수 지원 여부: 예
tol
— 특이값 허용오차
스칼라
특이값 허용오차로, 스칼라로 지정됩니다. 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)
의 속성 중 일부(전부는 아님)를 가집니다.
의사 역행렬 계산은 svd(A)
에 기반합니다. 계산은 tol
보다 작은 특이값을 0으로 처리합니다.
팁
pinv(A)*b
와 같이, 벡터b
에 적용한pinv
를 많은 경우에lsqminnorm(A,b)
로 바꾸어 선형 연립방정식의 최소 노름 최소제곱해를 구할 수 있습니다.lsqminnorm
은 일반적으로pinv
보다 효율적이고 희소 행렬도 지원합니다.
알고리즘
pinv
는 특이값 분해를 사용하여 A
의 의사 역행렬을 생성합니다. S
의 대각선을 따라서 tol
보다 작은 특이값은 0으로 처리되고, A
는 다음과 같이 표현됩니다.
A
의 의사 역행렬은 다음과 같습니다.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
코드 생성 시 이 함수에 대해 희소 행렬 입력값은 지원되지 않습니다.
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
이 함수는 GPU 배열을 완전히 지원합니다. 자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨R2021b: pinv
는 유한하지 않은 입력값에 대해 NaN
을 반환함
입력값에 유한하지 않은 값(Inf
또는 NaN
)이 포함되어 있을 때 pinv
는 NaN
값을 반환합니다. 이전에는 pinv
는 입력값에 유한하지 않은 값이 포함되어 있을 때 오류를 발생시켰습니다.
참고 항목
inv
| qr
| rank
| svd
| lsqminnorm
| decomposition
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)