Saya mencari solusi eksplisit cepat (berani saya katakan optimal?) 3x3 masalah nyata, , .
Matriks bersifat umum, tetapi dekat dengan matriks identitas dengan angka kondisi mendekati 1. Karena sebenarnya pengukuran sensor dengan presisi sekitar 5 digit, saya tidak keberatan kehilangan beberapa digit karena angka masalah.
Tentu saja, tidak sulit untuk menghasilkan solusi eksplisit berdasarkan sejumlah metode, tetapi jika ada sesuatu yang telah terbukti optimal dalam hal jumlah FLOPS, itu akan ideal (setelah semua, seluruh masalah kemungkinan akan masuk dalam register FP!).
(Ya, rutin ini sering disebut . Saya sudah menyingkirkan buah yang menggantung rendah dan ini yang berikutnya dalam daftar profiling saya ...)
linear-solver
reference-request
Damien
sumber
sumber
Jawaban:
Anda tidak dapat mengalahkan formula eksplisit. Anda dapat menuliskan formula untuk solusi pada selembar kertas. Biarkan kompiler mengoptimalkan hal-hal untuk Anda. Metode lain apa pun hampir pasti akan memiliki pernyataan atau loop (misalnya, untuk metode berulang) yang akan membuat kode Anda lebih lambat daripada kode garis lurus mana pun.x = A- 1b
if
for
sumber
Karena matriks sangat dekat dengan identitas, seri Neumann berikut akan menyatu dengan sangat cepat:
Bergantung pada keakuratan yang diperlukan, bahkan mungkin cukup baik untuk memotong setelah 2 istilah:
Ini mungkin sedikit lebih cepat daripada formula langsung (seperti yang disarankan dalam jawaban Wolfgang Bangerth), meskipun dengan akurasi yang jauh lebih sedikit.
Anda bisa mendapatkan akurasi lebih dengan 3 istilah:
tetapi jika Anda menuliskan formula entri-demi-entri untuk , Anda melihat jumlah operasi floating point yang sebanding sebagai rumus invers matriks 3x3 langsung (Anda tidak harus melakukan sebuah divisi, yang sedikit membantu).( 3 saya- 3 A + A2) b
sumber
Hitung FLOPS berdasarkan saran di atas:
LU, tidak berputar:
Eliminasi Gaussian dengan substitusi balik, tanpa berputar:
Aturan Cramer melalui ekspansi kofaktor
Terbalik secara eksplisit, lalu gandakan:
MATLAB proof-of-concept:
Aturan Cramer melalui Ekspansi Cofactor :
LU (tidak berputar) dan substitusi balik:
Terbalik secara eksplisit, lalu gandakan:
Eliminasi Gaussian:
Catatan: Silakan menambahkan metode dan jumlah Anda sendiri ke pos ini.
sumber
Mungkin Aturan Cramer. Jika Anda dapat menghindari pivot, mungkin faktorisasi LU; ini adalah matriks 3x3, jadi membuka gulungan secara manual akan mudah. Hal lain mungkin akan melibatkan percabangan, dan saya ragu bahwa metode ruang bagian Krylov akan cukup sering bertemu dalam 1 atau 2 iterates agar layak.
sumber