효율적인 tridiagonal matrix 알고리즘 구현


12

암시 적 숫자 체계를 사용하여 물리적 문제를 해결하고 있습니다. 이것은 3 각형 행렬로 선형 방정식을 푸는 데 도움이됩니다. 이 알고리즘 을 Wikipedia에서 코딩 했습니다 . 이 유형의 방정식을 최적화 된 방식으로 해결할 수있는 효율적인 라이브러리가 있는지 궁금합니다. 중요한 점은 시스템 매개 변수가 변경 될 때만 행렬 자체가 변경되므로 좋은 성능 보너스를 위해 일부 알고리즘 단계를 미리 계산할 수 있다는 것입니다. C ++을 사용하고 있습니다.


얼마나 큰 시스템입니까, 병렬이어야합니까?
aterrel

1
크기는 필요한 정확도 (수십에서 수만 개의 값)에 따라 다릅니다. 이제는 단일 코어 컴퓨터에서 코딩하고 있지만 많은 CPU를 사용하여 대학 슈퍼 컴퓨터에 액세스 할 수 있으므로 병렬 처리 지원이 좋을 것입니다.
gmk

답변:


15

LAPACK 구현,? gtsv로 시작해야합니다 (예 : dgtsv) . 분산 메모리 버전을 원한다면 ScaLAPACK의 p? gtsv로 시작하십시오.

편집 : 행렬이 자주 변경되지 않기 때문에 LAPACK 루틴? gtsv를 인수 분해 단계 (? gttrf)와 해결 단계 (? gttrs)로 나눠서 3 각형 행렬을 중복 인수 분해하는 것을 피할 수 있습니다. ScaLAPACK에도 비슷한 목적으로 사용되는 명명 된 루틴이 있습니다.


감사합니다. 필요한 것 같습니다. 이제 내 코드에서이 루틴을 실행하려고합니다.
gmk

1
C ++에서 호출하기 때문에 extern "C"{} 블록 안에 프로토 타입을 선언해야합니다. 시스템에 따라 루틴 이름에 밑줄을 추가해야 할 수도 있습니다.
Jack Poulson

2

분산 병렬 시스템의 경우 : 병렬 삼각형 솔버가있는 ScaLAPACK을 시도하지 않았습니다 . 온라인으로 사용할 수있는 예제가 있습니다 . 나는 LANL 간행물 에서 David Moulton이 제안한 방법으로 약간의 성공을 거두었 다 . 이것을 코딩하는 것은 당신이 원하는 것보다 많을 수도 있지만 LAPACK을 사용하면 해가 될 것입니다.


1

나는 흥미로운 재귀 알고리즘을 찾을 여기 페이지 그것은 약속 보이는 975에서, 나는 더 많은 경험이있는 사람들이 그것에 대해 무슨 말을 궁금합니다.


수치 레시피 에 오류가 있습니다. 사용할 코드 소스의 관점에서 볼 때 일부는 고전적인 것으로 간주되지만 최고는 아닙니다. ScaLAPACK이 재귀 순환 감소만큼 효율적인 알고리즘을 구현하지 않았다면 놀랐습니다.
Geoff Oxberry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.