효율적인 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.