Saya memecahkan masalah fisik menggunakan skema numerik implisit. Ini menuntun saya untuk memecahkan persamaan linear dengan matriks tridiagonal. Saya telah memberi kode algoritma ini dari Wikipedia. Saya ingin tahu apakah ada perpustakaan yang efisien yang memungkinkan untuk menyelesaikan persamaan jenis ini dengan cara yang dioptimalkan. Catatan penting adalah bahwa matriks itu sendiri berubah hanya ketika parameter sistem berubah, jadi saya memiliki kesempatan untuk menghitung ulang beberapa langkah algoritma untuk bonus kinerja yang bagus. Saya menggunakan C ++.
12
Jawaban:
Anda mungkin harus mulai dengan implementasi LAPACK,? Gtsv, mis., Dgtsv . Jika Anda ingin versi memori terdistribusi, maka Anda mungkin ingin memulai dengan p? Gtsv ScaLAPACK.
EDIT: Karena matriks Anda tidak sering berubah, Anda dapat menghindari memfaktorkan matriks tridiagonal secara berlebihan dengan memecah rutin LAPACK? Gtsv menjadi langkah faktorisasi,? Gttrf, dan tahap penyelesaian,? Gttrs. Demikian pula rutinitas bernama ada di ScaLAPACK yang melayani tujuan yang sama.
sumber
Untuk sistem paralel terdistribusi : Saya belum mencoba ScaLAPACK, yang memiliki pemecah tridiagonal paralel, yang tersedia contoh online . Saya telah mencoba dengan sukses beberapa metode yang diusulkan oleh David Moulton dalam publikasi LANL . Pengkodean ini mungkin lebih dari yang ingin Anda lakukan, tetapi dengan menggunakan LAPACK, ia lurus ke depan.
sumber
Saya menemukan algoritma rekursif yang menarik di sini di halaman 975. Kelihatannya menjanjikan, saya bertanya-tanya apa yang dikatakan orang yang lebih berpengalaman tentang hal itu.
sumber