rref
기약행 사다리꼴(가우스-조르당 소거법)
설명
예제
행렬의 기약행 사다리꼴
행렬을 생성하고 기약행 사다리꼴을 계산합니다. 이 형태에서 행렬은 각 열의 피벗 위치에서 선행하는 1을 갖습니다.
A = magic(3)
A = 3×3
8 1 6
3 5 7
4 9 2
RA = rref(A)
RA = 3×3
1 0 0
0 1 0
0 0 1
3×3 마방진 행렬은 완전 랭크 행렬이며, 따라서 기약행 사다리꼴은 단위 행렬입니다.
이제 4×4 마방진 행렬의 기약행 사다리꼴을 계산합니다. 0이 아닌 피벗 열을 반환하려면 출력값을 2개 지정하십시오. 이 행렬은 랭크 부족 행렬이므로 결과로 나오는 행렬은 단위 행렬이 아닙니다.
B = magic(4)
B = 4×4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
[RB,p] = rref(B)
RB = 4×4
1 0 0 1
0 1 0 3
0 0 1 -3
0 0 0 0
p = 1×3
1 2 3
첨가 행렬의 행 축약
첨가 행렬에 가우스-조르당 소거법을 사용하여 선형 시스템을 풀고 역행렬을 계산합니다. 이러한 값을 계산하는 더 효율적이고 수치적으로 안정적인 방법이 있기 때문에 이 기법은 주로 학술적인 목적으로만 쓰입니다.
3×3 마방진 행렬을 생성합니다. 행렬의 끝에 추가 열을 추가합니다. 이 첨가 행렬은 선형 시스템 를 나타내며, 추가 열은 에 해당합니다.
A = magic(3); A(:,4) = [1; 1; 1]
A = 3×4
8 1 6 1
3 5 7 1
4 9 2 1
A
의 기약행 사다리꼴을 계산합니다. R
의 요소를 참조하여, (첨가된) 추가 열에 있는 선형 시스템의 해가 담긴 항목을 추출합니다.
R = rref(A)
R = 3×4
1.0000 0 0 0.0667
0 1.0000 0 0.0667
0 0 1.0000 0.0667
x = R(:,end)
x = 3×1
0.0667
0.0667
0.0667
이 선형 시스템을 푸는 더 효율적인 방법은 백슬래시 연산자를 사용하는 것입니다(x = A\b
).
비슷한 마방진 행렬을 생성합니다만 이때 같은 크기의 단위 행렬을 마지막 열에 추가합니다.
A = [magic(3) eye(3)]
A = 3×6
8 1 6 1 0 0
3 5 7 0 1 0
4 9 2 0 0 1
A
의 기약행 사다리꼴을 계산합니다. 이 형태에서 추가 열에는 3×3 마방진 행렬에 대한 역행렬이 포함되어 있습니다.
R = rref(A)
R = 3×6
1.0000 0 0 0.1472 -0.1444 0.0639
0 1.0000 0 -0.0611 0.0222 0.1056
0 0 1.0000 -0.0194 0.1889 -0.1028
inv_A = R(:,4:end)
inv_A = 3×3
0.1472 -0.1444 0.0639
-0.0611 0.0222 0.1056
-0.0194 0.1889 -0.1028
역행렬을 계산하는 더 효율적인 방법은 inv(A)
를 사용하는 것입니다.
연립방정식 풀기
방정식 4개와 미지수 3개가 있는 선형 연립방정식이 있다고 가정하겠습니다.
연립방정식을 나타내는 첨가 행렬을 생성합니다.
A = [1 1 5; 2 1 8; 1 2 7; -1 1 -1]; b = [6 8 10 2]'; M = [A b];
rref
를 사용하여 기약행 사다리꼴로 연립방정식을 표현합니다.
R = rref(M)
R = 4×4
1 0 3 2
0 1 2 4
0 0 0 0
0 0 0 0
R
의 처음 두 행에는 으로 과 를 표현하는 방정식이 포함되어 있습니다. 두 번째 두 행은 우변 벡터에 맞는 최소한 하나의 해가 존재함을 암시하고 있습니다(그렇지 않을 경우, 방정식 하나는 이 됨). 세 번째 열은 피벗이 없습니다. 그러므로 은 독립 변수입니다. 따라서 과 에는 무수히 많은 해가 있고, 은 자유롭게 선택될 수 있습니다.
예를 들어, 인 경우 이 되고 가 됩니다.
수치적으로 보면, 이 연립방정식을 푸는 더 효율적인 방법은 (사각 행렬 A
의) 최소제곱해를 계산하는 x0 = A\b
를 사용하는 방법입니다. 이 경우에 norm(A*x0-b)/norm(b)
를 사용하여 해의 정확도를 검사할 수 있고, rank(A)
가 미지수의 개수와 같은지 검사하여, 해의 유일성을 검사할 수 있습니다. 해가 2개 이상 존재한다면 모두 의 형태를 가지며, 여기서 은 영공간 null(A)
이고 는 자유롭게 선택될 수 있습니다.
입력 인수
A
— 입력 행렬
행렬
입력 행렬입니다.
데이터형: single
| double
복소수 지원 여부: 예
tol
— 피벗 허용오차
max(size(A))*eps*norm(A,inf)
(디폴트 값) | 스칼라
피벗 허용오차로, 스칼라로 지정됩니다. 피벗 열에서 (절댓값으로) 가장 큰 요소가 허용오차 미만인 경우 해당 열은 0으로 됩니다. 따라서 허용오차보다 작은 0이 아닌 피벗 요소를 이용한 나눗셈과 곱셈이 불가능하게 됩니다.
데이터형: single
| double
출력 인수
제한 사항
rank
,orth
및null
은 통상적으로 더 빠르고 정확하게 행렬의 랭크와 기저 벡터를 계산합니다.선형 시스템을 푸는 데에는
mldivide
를 권장합니다.
세부 정보
부분 피벗 연산
부분 피벗 연산은 피벗 열에서 절댓값이 가장 큰 열 요소를 선택하고, 행렬의 행을 상호교환하여 이 요소가 피벗 위치(행의 가장 왼쪽에 있는 0이 아닌 요소)에 있도록 하는 방법입니다.
예를 들어, 아래의 행렬에서 알고리즘은 먼저 첫 열의 가장 큰 값을 식별한 다음((2,1) 위치의 값은 1.1
에 해당), 첫 번째 행과 두 번째 행 전체를 상호교환하여 이 값이 (1,1) 위치에 나타나도록 합니다.
가우스 소거법에서 부분 피벗 연산을 사용하면 계산에서 반올림 오차를 (완전히 제거하지는 못하지만) 줄여줍니다.
기약행 사다리꼴
다음 조건이 충족되는 경우 행렬은 행 사다리꼴입니다.
0이 아닌 요소가 하나라도 있는 행이 모든 요소가 0인 행보다 위에 있음
각 행의 선행 계수가 그 위의 행에 있는 선행 계수보다 엄격히 오른쪽에 있음
행 사다리꼴 행렬의 예는 다음과 같습니다.
기약행 사다리꼴이 되기 위한 추가적인 요건은 다음과 같습니다.
모든 선행 계수는 1이어야 하며, 그 열에서 유일하게 0이 아닌 요소여야 합니다.
보통 단위 행렬이 기약행 사다리꼴과 가장 관련이 깊지만, 다른 형태도 가능합니다. 기약행 사다리꼴인 행렬의 다른 예는 다음과 같습니다.
알고리즘
rref
는 부분 피벗 연산을 사용하여 가우스-조르당 소거법을 수행합니다. max(size(A))*eps*norm(A,inf)
의 디폴트 허용오차는 반올림 오차를 줄이기 위해 0으로 만들 수 있는 무시 가능한 열 요소인지를 검사합니다.
확장 기능
스레드 기반 환경
MATLAB®의 backgroundPool
을 사용해 백그라운드에서 코드를 실행하거나 Parallel Computing Toolbox™의 ThreadPool
을 사용해 코드 실행 속도를 높일 수 있습니다.
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
버전 내역
R2006a 이전에 개발됨
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)