Saya bermaksud untuk menyelesaikan Ax = b di mana A adalah matriks persegi atau persegi panjang empat persegi panjang yang rumit, jarang, tidak simetris dan sangat tidak terkondisi (kondisi nomor ~ 1E + 20). Saya telah berhasil menyelesaikan sistem dengan ZGELSS di LAPACK secara akurat. Tetapi seiring dengan meningkatnya derajat kebebasan dalam sistem saya, perlu waktu lama untuk menyelesaikan sistem pada PC dengan ZGELSS karena sparsity tidak dieksploitasi. Baru-baru ini saya mencoba SuperLU (menggunakan penyimpanan Harwell-Boeing) untuk sistem yang sama tetapi hasilnya tidak akurat untuk nomor kondisi> 1E + 12 (Saya tidak yakin apakah ini merupakan masalah numerik dengan pivoting).
Saya lebih cenderung menggunakan pemecah yang sudah dikembangkan. Apakah ada pemecah yang kuat yang dapat memecahkan sistem yang saya sebutkan dengan cepat (yaitu mengeksploitasi sparsity) dan andal (mengingat angka-angka kondisi)?
sumber
__float128
Jawaban:
Ketika Anda menggunakan ZGELSS untuk mengatasi masalah ini, Anda menggunakan dekomposisi nilai singular terpotong untuk mengatur masalah yang sangat tidak terkondisi ini. penting untuk memahami bahwa rutin pustaka ini tidak berusaha menemukan solusi kuadrat terkecil untuk , melainkan berusaha menyeimbangkan menemukan solusi yang meminimalkanterhadap meminimalkan.Ax=b ∥x∥ ∥Ax−b∥
Perhatikan bahwa parameter RCOND yang diteruskan ke ZGELSS dapat digunakan untuk menentukan nilai singular mana yang harus dimasukkan dan dikecualikan dari perhitungan solusi. Nilai singular apa pun yang kurang dari RCOND * S (1) (S (1) adalah nilai singular terbesar) akan diabaikan. Anda belum memberi tahu kami bagaimana Anda mengatur parameter RCOND di ZGELSS, dan kami tidak tahu apa-apa tentang tingkat kebisingan dari koefisien dalam matriks Anda atau di sisi kanan , jadi sulit untuk mengatakan apakah Anda telah menggunakan jumlah regularisasi yang tepat.A b
Anda tampaknya senang dengan solusi yang diregulasi yang Anda peroleh dengan ZGELSS, sehingga tampaknya regularisasi dipengaruhi oleh metode SVD terpotong (yang menemukan solusi minimum antara solusi kuadrat terkecil yang meminimalkan atas ruang solusi yang direntang oleh vektor singular yang terkait dengan nilai singular yang lebih besar dari RCOND * S (1)) memuaskan Anda.∥x∥ ∥Ax−b∥
Pertanyaan Anda dapat diformulasikan ulang sebagai "Bagaimana saya dapat secara efisien memperoleh solusi kuadrat terkecil yang terregulasi untuk masalah kuadrat linear terkecil yang besar, jarang, dan sangat tidak terkondisi ini?"
Rekomendasi saya adalah menggunakan metode berulang (seperti CGLS atau LSQR) untuk meminimalkan masalah kuadrat terkecil yang diatur secara eksplisit.
di mana parameter regularisasi disesuaikan sehingga masalah kuadrat terkecil teredam dengan baik dan sehingga Anda senang dengan solusi yang diregulasi yang dihasilkan.α
sumber
Jed Brown telah menunjukkan hal ini dalam komentar untuk pertanyaan, tetapi sebenarnya tidak banyak yang dapat Anda lakukan dalam presisi ganda biasa jika jumlah kondisi Anda besar: dalam kebanyakan kasus, Anda mungkin tidak akan mendapatkan satu digit akurasi dalam solusi Anda dan, lebih buruk lagi, Anda bahkan tidak tahu karena Anda tidak dapat secara akurat mengevaluasi residu yang sesuai dengan vektor solusi Anda. Dengan kata lain: ini bukan pertanyaan tentang solver linier mana yang harus Anda pilih - tidak ada solver linier yang dapat melakukan sesuatu yang berguna untuk matriks seperti itu.
Situasi semacam ini biasanya terjadi karena Anda memilih basis yang tidak sesuai. Misalnya, Anda mendapatkan matriks yang dikondisikan buruk jika Anda memilih fungsi sebagai dasar metode Galerkin. (Ini mengarah ke matriks Hilbert, yang terkenal buruk kondisinya). Solusi dalam kasus-kasus seperti ini bukanlah dengan bertanya pemecah mana yang dapat memecahkan sistem linier, tetapi tanyakan apakah ada basis yang lebih baik yang dapat digunakan. Saya akan mendorong Anda untuk melakukan hal yang sama: pikirkan tentang merumuskan kembali masalah Anda sehingga Anda tidak berakhir dengan matriks semacam ini.1,x,x2,x3,...
sumber
Cara termudah / tercepat untuk menyelesaikan masalah yang tidak terkondisikan adalah untuk meningkatkan presisi perhitungan (dengan kekerasan). Cara lain (namun tidak selalu mungkin) adalah merumuskan kembali masalah Anda.
Anda mungkin perlu menggunakan presisi empat kali lipat (34 angka desimal). Meskipun 20 digit akan hilang dalam suatu kursus (karena nomor kondisi) Anda masih akan mendapatkan 14 digit yang benar.
Jika itu menarik, sekarang solver jarang quad-presisi tersedia di MATLAB juga.
(Saya penulis kotak alat yang disebutkan).
sumber