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

det

행렬식(Matrix Determinant)

설명

예제

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

예제

모두 축소

3x3 정사각 행렬 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)을 작은 수와 곱하여 10x10 행렬을 생성합니다.

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의 조건이 나쁘지 않음을 보여줍니다.

조건이 나쁜 행렬 A의 역행렬 A^(-1)을 명시적으로 계산하지 않고 A^(-1)의 행렬식을 계산하는 방법을 검토합니다.

10x10 힐베르트 행렬 A를 생성합니다.

A = hilb(10);

A의 조건수를 구합니다.

c = cond(A)
c = 1.6025e+13

조건수가 크면 A가 특이 행렬에 가깝다는 것을 나타내므로 inv(A)를 계산할 경우 결과가 정확하지 않을 수 있습니다. 따라서 역행렬의 행렬식 계산 det(inv(A))도 정확하지 않습니다.

다음과 같은 사실을 이용하여 A의 역행렬의 행렬식을 계산합니다.

det(A-1)=1det(A)

d1 = 1/det(A)
d1 = 4.6202e+52

이 방법은 행렬 A의 역행렬을 계산하지 않습니다.

invhilb를 사용하여 힐베르트 행렬 A의 정확한 역행렬의 행렬식을 계산합니다. 결과를 d1과 비교하여 d1의 상대 오차를 구합니다.

d = det(invhilb(10));
relError = abs(d1-d)/abs(d)
relError = 1.0443e-04

d1의 상대 오차는 매우 작습니다. A의 역행렬을 명시적으로 계산하지 않음으로써 상대 오차가 최소화됩니다.

비교를 위해 A의 역행렬을 명시적으로 계산하여 역행렬의 행렬식도 계산합니다. 결과를 d와 비교하여 상대 오차를 확인합니다.

d2 = det(inv(A));
relError2 = abs(d2-d)/abs(d)
relError2 = 2.2039e-05

d2 계산의 상대 오차는 d1 계산의 경우보다 훨씬 더 큽니다.

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

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

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

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

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

d = det(A)
d = 1.0597e+05

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 이전에 개발됨