di matlab, apa perbedaan antara linsolve dan mldivide?

10

dalam matlab, baik linsolve dan mldivide digunakan untuk menyelesaikan sistem persamaan linear, dalam semua kasus yang ditentukan, ditentukan secara berlebihan dan tidak ditentukan.

Membaca dokumen mereka, saya bertanya-tanya apa perbedaan di antara mereka? Apakah mereka menggunakan algoritma faktorisasi matriks dan triangularisasi yang hampir sama dalam tiga kasus?

Jika A memiliki properti dalam opt, linsolve lebih cepat daripada mldivide, karena linsolve tidak melakukan tes apa pun untuk memverifikasi bahwa A memiliki properti yang ditentukan

Apakah mldivide melakukan tes yang sama untuk memverifikasi apakah A memiliki properti khusus? Atau apakah mldivide hanya memperlakukan mereka sebagai kasus umum tanpa sifat khusus?

Terima kasih!

Tim
sumber

Jawaban:

16

Keduanya merupakan pemecah langsung untuk memecahkan sistem linear (berlawanan dengan pemecah iteratif).

mldividetidak melakukan tes untuk dalam menyelesaikan . Silakan lihat jawaban Allan di utas ini untuk informasi lebih lanjut. Juga lihat bantuan MATLAB pada algoritma di sini.AAx=bmldivide

mldivideuntuk matriks kuadrat: Jika A simetris dan memiliki elemen diagonal nyata dan positif, MATLAB mencoba faktorisasi Cholesky. Jika faktorisasi Cholesky gagal, MATLAB melakukan faktorisasi simetris, tidak terbatas. Jika A adalah Hessenberg atas, MATLAB menggunakan eliminasi Gaussian untuk mengurangi sistem ke matriks segitiga. Jika A adalah bujur sangkar tetapi tidak diijinkan segitiga, simetris dan pasti positif, atau Hessenberg, maka MATLAB melakukan faktorisasi segitiga umum menggunakan faktorisasi LU dengan pivoting parsial

linsolve untuk matriks kuadrat: faktorisasi LU dengan pivot parsial

mldividedan linsolveuntuk matriks persegi panjang: faktorisasi QR

Dalam linsolvesebagai bantuan doc menunjukkan di situs mathworks, Anda bisa menghindari proses pengujian tambahan (Allan menggunakan kata "overhead" dalam jawabannya) dengan menggunakan optsjika dan hanya jika Anda tahu apa yang adalah seperti di muka. Untuk masalah besar, Anda bisa menghemat waktu. Sebagai contoh:A

opts.POSDEF = true; linsolve(A,b,opts)

akan mengembalikan jika Anda tahu pasti positif di muka. Namun, pilihan yang salah mengarah ke hasil yang salah.xAopts

Jika kriteria tertentu dipenuhi, linsolvedan mldividelakukan proses faktorisasi yang sama. Misalnya, untuk sistem pasti positif padat yang memenuhi sifat-sifat tertentu, atau Anda memiliki sistem yang ditentukan secara berlebihan dan keduanya melakukan pemasangan kuadrat terkecil.

Selain itu, linsolvebisa juga melakukan perhitungan simbolik . Ini berguna ketika Anda memiliki sistem kecil yang tidak ditentukan yang memiliki jumlah solusi tak terbatas. linsolvememungkinkan Anda untuk menyelesaikannya secara simbolis, mldividetidak bisa melakukan itu. Namun, jika variabel tidak dideklarasikan secara simbolis, mldividedan linsolveakan memberi Anda pesan peringatan yang sama, "Matriks tunggal untuk presisi kerja."

Last but not least, linsolvetidak mendukung sistem jarang seperti matriks berikut (titik biru berarti entri tidak nol). Sementara mldividebisa menangani sistem jarang dengan kuat ketika ukurannya di bawah 200k oleh 200k. contoh jarang

Shuhao Cao
sumber