최소 대역폭의 밴드 행렬을 생성하기 위해 변수를 재정렬하는 방법?


15

유한 차이로 2D 푸 아송 방정식을 풀려고합니다. 이 과정 에서 각 방정식에 변수 만있는 희소 행렬을 얻습니다 . 예를 들어 변수가 U 이면 이산화는 다음과 같습니다.5U

Ui1,j+Ui+1,j4Ui,j+Ui,j1+Ui,j+1=fi,j

반복적 인 방법으로이 시스템을 해결할 수 있다는 것을 알고 있지만 변수를 적절하게 주문하면 직접 방법으로 해결할 수있는 밴딩 행렬을 얻을 수 있다는 생각이 들었습니다 (예 : 가우시안 제거 w / o 피봇 팅). 이게 가능해? 덜 구조화 된 다른 희소 시스템에 대해이를 수행하기위한 전략이 있습니까?


2
그렇다면 Cuthill-McKee와 같은 것이 있습니까?
JM

흥미 롭습니다 ... 전에 Cuthill-McKee 알고리즘에 대해 들어 본 적이 없습니다! :)
Paul

1
Reverse Cuthill-McKee도 있습니다.
Geoff Oxberry 2012 년

1
나는 대답이 명확하기를 희망하지만 이 문제에 밴드 솔버를 사용하거나 대역폭을 최소화하는 순서를 선택하고 싶지 않습니다 . 아마도 질문이나 선택한 답변을 편집하여 이것을 명확하게 할 수 있습니다. 그렇지 않으면이 신화가 영속 될 것이라고 두려워합니다. 시각적으로 비교하고 scicomp.stackexchange.com/a/880/119 에서 채우기를 비교 했습니다 .
제드 브라운

@JedBrown : 실제로, 나는 포아송 문제를 다루지 않고있다. 내 문제는 포아송 문제와 유사한 구조를 가지고있다. 행렬이 대각선이 아닌 지배적이며 (대각선에있는) 대각선이 아닌 항목이 정확히 대각선 항목의 합에 더해집니다.
Paul

답변:


13

이것은 드문 드문 솔버 분야에서 잘 연구 된 문제입니다. 재정렬 및 ​​수퍼 노드가 채우기 및 솔루션 시간에 미치는 영향에 대한 더 나은 아이디어를 얻으려면 다중 정면 방법대한 Joseph Liu의 개요를 읽는 것이 좋습니다 .

중첩 해부는 재정렬을 생성하는 매우 일반적인 방법이며 본질적으로 재귀 그래프 분할로 구성됩니다. MeTiS 는 그래프 파티셔닝을위한 사실상의 표준이며, 여기 에서 아이디어의 일부를 읽을 수 있습니다 . 또 다른 일반적으로 사용되는 패키지는 SCOTCH 하고, 차코는 자사의 저자 도입으로, 또한 중요하다 다단계 그래프 분할 도, 메티스 뒤에 기본적인 생각을 .

조지와 리우 보여 주었다 그들의 고전적인 책에서 2D 스파 스 직접적인 솔루션은 필요로하는 작업 및 O ( N 로그 N ) 가 필요합니다 3D 스파 스 직접적인 동안, 메모리를 O ( N 2 ) 작업 및 O ( N / 3 ) 메모리.O(n3/2)O(nlogn)O(n2)O(n4/3)


George and Liu 참고 문헌에 대한 인용이 있습니까?
Paul

추가; 자동차를 처음 제출했을 때 차에서 내리려고했습니다. 온라인 어딘가에 무료로 구할 수있는 버전의 책이 있다는 것을 알고 있습니다 (Jed는 어디에 있는지 알고 있음).
Jack Poulson

도서 검토 대신 도서의 PDF를 가리 키도록 링크를 업데이트했습니다.
Jed Brown

@JedBrown 그것은 훌륭한 참조였습니다! 정말 고마워! :)
Paul

1
@Alexander Everyone은 3D가 George와 Liu에 바인딩되어 있지만 책에서 명시 적으로 지적했는지는 모르겠습니다. 그러나 이론에서 명백하다. A에 대한 최소한의 정점 세퍼레이터 격자는 N 2 / 3 = m × m . 그 슈퍼 노드와 관련된 밀도 행렬을 갖는 ( N 2 / 3 ) (2) = N 4 / 3 항목을 요구하고 ( N 2 / 3 ) (3) = N 2n=m×m×mn2/3=m×m(n2/3)2=n4/3(n2/3)3=n2고려할 연산. 2D 경우의 로그 항은 더 미묘하며 8 장 중첩 해부에서 처리되어 하한을 달성합니다.
Jed Brown

5

Cuthill-McKee 는 당신이하고 싶은 것에 대한 사실상의 표준입니다. 이 방법을 사용하려면 BGL ( 부스트 그래프 라이브러리 )에 사용하기 쉬운 알고리즘 구현 (및 그 반대)이 있으며 설명서에는이 방법을 사용하는 예제가 포함되어 있습니다.


실제로 Cuhill-McKee를 뒤집습니다. 보통 덜 채 웁니다. 그러나 중첩 된 분리 순서는 낮은 대역폭 순서보다 훨씬 우수합니다.
Arnold Neumaier

4

다중 정면 방법에 대해 말하면, LU 인수 분해를위한 다중 정면 방법 ( UMFPACK ) 에서 작업하는 팀 데이비스 는 채우기를 최소화하기 위해 행렬을 재정렬하는 많은 루틴을 가지고 있습니다. SuiteSparse의 일부로 여기에서 찾을 수 있습니다 . SuiteSparse는 MeTiS를 사용합니다.

주의해야 할 또 다른 사항 : 일부 문제에서는 변수를 정렬하는 것에 대해 영리하여 밴딩되거나 밴딩 된 패턴에 가까워지면 이러한 알고리즘을 호출하는 데 따른 문제 (및 CPU 시간)를 줄일 수 있습니다. 그러나,이 영리한 재정렬은 여러분의 통찰력을 필요로하며, 사람들이 여기서 답변에서 언급 한 그래프 이론 기반 재정렬 알고리즘만큼 일반적으로 가까운 곳은 아닙니다.


천만에요, 폴 마음에 들면 투표하십시오.
Geoff Oxberry 5

3

적용된 수학 서클에는 ADI (Alternating Direction Implicit)라는 알고리즘이 있으며 기본적으로 설명하는 것을 수행하는 물리 서클에는 스플릿 연산자가 있습니다. 반복적 인 방법이며 다음과 같은 기본 절차를 따릅니다.

  1. 모든 가치에 대해 와이 에서 휴식을 취하십시오 엑스-방향. 이 행렬은 3 각형이어야하므로 비교적 적은 시간에 직접 해결할 수 있습니다.

  2. 모든 가치에 대해 엑스 에서 휴식을 취하십시오 와이-방향. 다시 말하지만, 이것은 매우 빠릅니다.

  3. 오류가 원하는만큼 작을 때까지 1과 2를 반복하십시오.

이 알고리즘의 공식적인 복잡성을 모르지만, 그것을 사용할 때마다 Jacobi 및 Gauss-Seidel과 같은 것보다 적은 반복으로 수렴하는 것으로 나타났습니다.


2
운영자 분할 경로로 이동하기로 결정한 경우주의해야 할 사항은 운영자 분할이 경우에 따라 정상 상태 솔루션에서 오류를 발생시키는 것으로 알려져 있습니다. (나의 실험실 동료 중 한 명이이 어려움을 극복 할 수있는 방법을 개발했지만 아직 공개하지 않았다고 생각합니다.) 또한 운영자 분할은 수치 오류를 일으키는 것으로 알려져 있습니다. 이러한 오류 를 사후 에 추정 할 수있는 잘 확립 된 방법이있다 . Don Estep은 그 분야에서 훌륭한 작업을 수행했습니다.
제프 옥스 베리

@GeoffOxberry 다른 분리를 말하는 것 같습니다. 실제로 시스템을 해결하므로 분할 오류가없는 완전 암시 적 체계에서 ADI를 사용할 수 있습니다. 분할 오류를 엄격하게 제어하는 ​​IMEX 방법도 있습니다.
Jed Brown

@JedBrown : Godunov와 Strang splitting에 대해 이야기하고 있었는데,이를 분리하면 비슷한 3 각 행렬을 얻을 수 있습니다 엑스와이자귀. 내 잘못이야. (나는 사람들에게
포스트 닥

나는 Godunov와 Strang splitting에 대해 들어 본 적이 없습니다. 나는 연산자를 Baker-Campbell-Hausdorf 공식으로 나누는 경향이 있습니다. 그것은 같은 것입니까?
Dan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.