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


15

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

Ui−1,j+Ui+1,j−4Ui,j+Ui,j−1+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(nlog⁡n)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.