이들의 구성에 대한 몇 가지 정보가 없으면 양의 확실한 실제 대칭 행렬, 할 수있는 제안은 매우 제한 필요성이다.12×12
Sourceforge에서 Armadillo 패키지를 다운로드하고 설명서를 살펴 보았습니다. 및 를 별도로 계산하여 성능을 향상 시키십시오 . 여기서 는 예를 들어 . 문서는 이것이 최대 크기 행렬에 대한 기본값 이므로 생략하면 옵션이 경우에 대한 기본값 이라고 가정합니다 .det ( 12 I − Q − J ) J 4 × 4 12 × 12det(Q)det(12I−Q−J)Jdet(Q,slow=false)
4×4slow=true
12×12
무엇 slow=true
아마도 수행하면 결정이 쉽게 발견되는 행에 쉴론 양식을 얻기에 부분 또는 전체 회전이다. 그러나 행렬 가 양의 명확한 값 임을 미리 알고 있으므로 안정성을 위해 피벗을 수행 할 필요가 없습니다 (적어도 대부분의 계산에서는 추정 할 수 있습니다. 피벗이 지나치게 작아지면 Armadillo 패키지에서 예외가 발생하는지 확실하지 않지만 합리적인 숫자 선형 대수 패키지의 특징 편집 : 나는 상당한 기능을 위해 C ++ 템플릿을 사용하여 헤더 파일에서 구현하는 Armadillo 코드를 발견했습니다 .이 설정 은 영향을 미치지 않습니다 .12 × 12Qdet
include\armadillo_bits\auxlib_meat.hpp
slow=false
12×12계산은 피벗이 필요하지 않다는 표시없이 그 시점에서 계산이 "벽을 넘어서"LAPACK (또는 ATLAS)에 전달되기 때문에 결정됩니다. det_lapack
해당 파일에서 호출을 참조하십시오 .
다른 요점은 BLAS 및 LAPACK의 고속 교체에 연결하는 Armadillo 패키지를 빌드하는 권장 사항을 따르는 것입니다. 섹 참조. 자세한 내용은 Armadillo README.TXT 파일의 5를 참조하십시오. [현재 64 비트 시스템의 속도에는 전용 64 비트 버전의 BLAS 또는 LAPACK을 사용하는 것이 좋습니다.]
에 켈론 형태로의 행 축소는 본질적으로 가우시안 제거이며, 산술 복잡도 있습니다. 두 행렬 모두이 작업의 두 배 또는 입니다. 이러한 작업은 처리 과정에서 "병목 현상"이 될 수 있지만 특별한 구조가 없으면 (또는 상환을 허용하는 1 조 개의 테스트 사례간에 알려진 관계가 있음) 작업이 로 줄어들 수 있다는 희망은 거의 없습니다 .(4)23n3+O(n2)QO(N2)43n3+O(n2)QO(n2)
비교를 위해, 일반 행렬의 보조 인자에 의한 확장 에는 포함됩니다곱셈 연산 (대략 많은 덧셈 / 빼기)이므로 경우 비교 ( vs. )는 보조 인자에 대한 제거를 분명히 선호합니다.n ! n = 12 12 ! = 479001600 2n×nn!n=1212!=47900160023n3=1152
작업이 필요한 또 다른 방법 은 가계 변환을 통해 를 3 각형 으로 줄이고 를 3 각형으로 만드는 것입니다. 그 후 컴퓨팅 및 는 연산 에서 수행 될 수 있습니다 . [ 두번째 결정에서 랭크 1 업데이트 의 효과는 하나의 삼각형 시스템을 해결함으로써 주어진 스칼라 인자로 표현 될 수있다.]Q12I-Q의DET(Q)DET(12I-Q-J)O(N)-J43n3+O(n2)Q12I−Qdet(Q)det(12I−Q−J)O(n)−J
이러한 독립적 인 계산을 구현하는 것은 Armadillo의 det
함수 를 성공적으로 (또는 실패한) 호출 한 결과를 확인하는 데 유용 할 수 있습니다 .
특수 사례 : Jernej의 의견에서 제안한 바와 같이 여기서 는 모든 것의 1 순위) 행렬이고 은 단수형 (양수) 대각선 행렬. 실제로 그래프 이론에서 제안 된 응용의 경우 정수 행렬이됩니다. 그런 다음 대한 명시 적 공식 은 다음과 같습니다.J D = diag ( d 1 , … , d n ) det ( Q )Q=D−JJD=diag(d1,…,dn)det(Q)
det(Q)=(∏i=1ndi)(1−∑i=1nd−1i)
증명의 스케치는 더 넓은 적용 가능성을 설명 할 수있는 기회를 제공합니다. 즉, 에 알려진 결정 요인이 있고 시스템 가 빠르게 해결 될 때마다 . 다음을 고려하여 시작하십시오.D v = ( 1 … 1 ) TDDv=(1…1)T
det(D−J)=det(D)⋅det(I−D−1J)
이제 는 다시 1 등급, 즉 입니다. 두 번째 결정 요인은 다음과 같습니다.( D - 1 (1) ... D - 1 N ) T ( 1 ... 1 )D−1J(d−11…d−1n)T(1…1)
f(1)=det(I−D−1J)
여기서 는 의 특성 다항식입니다 . 랭크 1 행렬로서, 는 nullspace를 설명하기 위해 적어도 인자를 가져야합니다. 계산에서 볼 수 있듯이 "missing"고유 값은 .D − 1 J f ( x ) n − 1 x ∑ d − 1 if(x)D−1Jf(x)n−1x∑d−1i
D−1J(d−11…d−1n)T=(∑d−1i)(d−11…d−1n)T
특성 다항식 이며 은 , 입니다.f(1)det(I− D − 1 J)1−∑ d − 1 if(x)=xn−1(x−∑d−1i)f(1)det(I−D−1J)1−∑d−1i
또한 이면 이며, 결정 값은 단순히 대각선 항목의 대각선 행렬입니다.12 I − Q − J = 12 I − D + J − J =Q=D−J12I−Q−J=12I−D+J−J=12I−D