대칭 양수 한정 행렬의 대각선 업데이트


19

n × n G n n GA 는 대칭 양수 한정 (SPD) 희소 행렬입니다. 는 희소 대각선 행렬입니다. 은 크고 ( > 10000) 이 아닌 숫자 는 일반적으로 100 ~ 1000입니다.n×nGnnG

L D L TA 는 cholesky 형식에서 로 인수 분해되었습니다 .LDLT

가 가 될 때 과 효율적 으로 업데이트하는 방법은 무엇입니까?LDAA+G


G는 긍정적 인 요소만을 가지고 있습니까? 그렇다면 사소한 상한이 있습니다. 대각선 업데이트를 순위 1 업데이트의 합계로 봅니다. 1 순위 업데이트의 LDL ^ t 인수 분해를 계산하는 O (n ^ 2) 메소드가 있습니다 (Google 검색에서 예제 제공). 그러면 대각선 업데이트는 O (rn ^ 2)에서 실행됩니다. 여기서 r은 0이 아닌 대각선 요소의 수입니다. 이러한 업데이트의 특성상 계산을 저장하는 바로 가기가 있지만 가능한지 확실하지 않습니다. O (rn ^ 2) 이하로 차수를 줄입니다.

3
동의합니다. 저는 인수 분해를 반복하는 것보다 Cholesky 분해에 대각선 업데이트를 더 빨리 수행 할 수있는 방법이 없다고 생각합니다. 그러나 시간 내에 하나의 업데이트 만 수행 할 수 있습니다. 의 대각선에 각각 0이 아닌 값 . GO(m2)G
Brian Borchers

10
들어 및 수백, 리팩토링 이길 힘들 것 . 의 크기 가 훨씬 커지고 가 매우 희박한 경우 그 결과를 얻을 수 있습니다. 어쨌든 가능한 업데이트 및 근사값은 사전 계산 후 2 차 시간에 대각선 + 고정 대칭 선형 시스템을 해결할 수 있습니까? . n n z ( G ) A A Gn104nnz(G)AAG
Jed Brown

5
제드, 난 당신이 여기에 답변을 귀하의 의견을 홍보해야한다고 생각합니다.
Michael Grant

답변:


3

최신 버전의 CHOLMOD SuiteSparse 패키지 (베타 4.4.5)는 MATLAB (및 C) API를 사용하여 분해에 대한 대칭 행 / 열 (rank2 업데이트) 수정을 지원합니다 . 내 프로젝트 중 하나에서 성공적으로 사용했습니다.LDLT

이를 사용 하여 인수 분해에 대한 업데이트를 수행 할 수 있습니다 . 백서를 기반으로 합니다 .nnz(G)

따라서 복잡도는 입니다. 여기서 사용하여 A 때 상당히 감소 될 수 순열을 줄여 충전 희소위한O(nnz(G)nnz(L))nnz(L)AA

패키지는 여기 에서 다운로드 할 수 있습니다

다음은 패키지 소유자가 제공 한 메모입니다 (팀 데이비스 교수).

API :

LD = ldlrowmod (LD, k)는 A (:, k) 및 A (k, :)를 k 번째 행 / 식별로 설정하여 행 / 열 k를 삭제합니다.

LD = ldlrowmod (LD, k, C)는 A의 k 번째 행 / 열 (k 번째 행 / 동일한 열이어야 함)을 스파 스 열 C로 바꿉니다.

복잡성:

행 추가 / 삭제는 최대 시간이 이 이면 시간은 최대 입니다.O(nnz(L))nnz(L)O(n)O(n)

순열 감소 채우기 :

드물게이 같이 사용자의 행렬을 인수 분해하는 좋은 아이디어입니다 = A. 오히려 우리를 뒤 바꿔 = 그래서 훨씬 적은 nonzeros 있습니다.LDLTLDLTPAPTL

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.