Main Content

det

행렬식(Matrix Determinant)

설명

예제

d = det(A)는 정사각 행렬 A의 행렬식을 반환합니다.

예제

모두 축소

3×3 정사각 행렬 A를 만듭니다.

A = [1 -2 4; -5 2 0; 1 0 3]
A = 3×3

     1    -2     4
    -5     2     0
     1     0     3

A의 행렬식을 계산합니다.

d = det(A)
d = -32

행렬식이 특이성의 정확한 척도가 아닌 이유를 검토합니다.

단위 행렬 eye(10)을 작은 수와 곱하여 10×10 행렬을 생성합니다.

A = eye(10)*0.0001;

행렬 A 주대각선의 항목들은 매우 작은 값을 갖습니다. 그러나 A는 단위 행렬에 곱셈을 실행한 행렬이기 때문에 특이 행렬이 아닙니다.

A의 행렬식을 계산합니다.

d = det(A)
d = 1.0000e-40

이 행렬식은 매우 작은 값을 갖습니다. abs(det(A)) < tol 형식에 대한 허용오차 테스트를 수행하면 이 행렬을 특이 행렬로 표시할 가능성이 높습니다. 행렬의 행렬식이 0에 가까울지라도 A는 실제로 조건이 나쁘지 않습니다. 따라서 A는 특이 행렬에 가깝지 않습니다. 행렬의 행렬식은 특이성에 대한 정보를 나타내지 않고도 얼마든지 0에 가까워질 수 있습니다.

A가 특이 행렬인지 조사하려면 cond 함수나 rcond 함수를 사용하십시오.

A의 조건수를 계산합니다.

c = cond(A)
c = 1

결과는 A의 조건이 나쁘지 않음을 보여줍니다.

분명히 특이 행렬이지만 0이 아닌 큰 행렬식을 갖는 행렬을 검토합니다. 이론상으로 모든 특이 행렬의 행렬식은 0이지만, 부동소수점 계산의 특성으로 인해 이런 이상적인 결과를 항상 얻을 수는 없습니다.

17×17 대각선 우위 특이 행렬 A를 만들고 0이 아닌 요소의 패턴을 확인합니다.

A = diag([36 54 24 46 64 78 88 94 96 94 88 78 64 46 24 54 36]);
S = diag([-27 -12 -13 -24 -33 -40 -45 -48 -49 -48 -45 -40 -33 -12 -27 -36],1);
A = A + S + rot90(S,2);
spy(A)

Figure contains an axes object. The axes object with xlabel nz = 49 contains a line object which displays its values using only markers.

A는 행이 선형 종속이므로 특이 행렬입니다. 예를 들어, sum(A)는 0의 벡터를 생성합니다.

A의 행렬식을 계산합니다.

d = det(A)
d = 2.6698e+10

A가 특이 행렬이라는 사실에도 불구하고, A의 행렬식이 매우 큽니다. A의 행렬식은 정확히 0이어야 합니다. d가 정확하지 않은 것은 MATLAB®의 LU 분해 구현에서 반올림 오차의 누적 때문입니다. LU 분해는 det가 행렬식을 계산하는 데 사용됩니다. 이 결과는 숫자 행렬식을 계산하는 데 있어 몇 가지 중요한 측면을 보여줍니다. 자세한 내용은 제한 사항 섹션을 참조하십시오.

입력 인수

모두 축소

입력 행렬로, 정사각 숫자형 행렬로 지정됩니다.

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

제한 사항

다음과 같은 제한 사항이 있으므로, det를 사용하여 행렬이 특이 행렬인지 여부를 검토하지 않는 것이 좋습니다. 대신 cond 또는 rcond를 사용하십시오.

제한 사항결과

행렬식의 크기는 일반적으로 행렬의 조건수와 관련이 없습니다.

조건수를 변경하지 않아도 행렬의 행렬식이 임의로 크거나 작을 수 있습니다.

det는 LU 분해를 사용하여 행렬식을 계산합니다. 이 경우 부동소수점 반올림 오차가 발생하기 쉽습니다.

행렬식 계산은 가끔씩 수치적으로 불안정합니다. 예를 들어, det는 특이 행렬의 행렬식의 크기가 0이어야 할 경우에도 크기가 큰 행렬식을 생성할 수 있습니다.

알고리즘

detlu 함수를 사용하여 가우스 소거법(Gaussian Elimination)으로 얻은 삼각 인수에서 행렬식을 계산합니다.

[L,U] = lu(X)
s =  det(L)      % This is always +1 or -1 
det(X) = s*prod(diag(U))

확장 기능

버전 내역

R2006a 이전에 개발됨

참고 항목

| | | | | |