Saya sadar bahwa membalikkan matriks untuk menyelesaikan sistem linear bukanlah ide yang baik, karena itu tidak seakurat dan seefisien langsung memecahkan sistem atau menggunakan LU, Cholesky atau penguraian QR.
Namun, saya belum dapat memeriksa ini dengan contoh praktis. Saya telah mencoba kode ini (dalam MATLAB)
M = 500;
A = rand(M,M);
A = real(expm(1i*(A+A.')));
b = rand(M,1);
x1 = A\b;
x2 = inv(A)*b;
disp(norm(b-A*x1))
disp(norm(b-A*x2))
dan residu selalu dalam urutan yang sama (10 ^ -13).
Bisakah seseorang memberikan contoh praktis di mana inv (A) * b jauh kurang akurat daripada A \ b?
------ Pembaruan pertanyaan ------
Terima kasih atas jawaban anda Namun, misalkan kita harus menyelesaikan kali suatu sistem , di mana selalu matriks yang sama. Pertimbangkan itu
- penuh, dan dengan demikian membutuhkan penyimpanan memori yang sama dari .
-Jumlah kondisi kecil, maka dapat dihitung dengan akurasi.
Dalam hal itu, bukankah lebih efisien untuk menghitung daripada menggunakan dekomposisi LU? Misalnya, saya sudah mencoba kode Matlab ini:
%Set A and b:
M = 1000;
A = rand(M,M);
A = real(expm(1i*(A+A.')));
b = rand(M,1);
%Times we solve the system:
n = 3000;
%Performing LU decomposition:
disp('Performing LU decomposition')
tic
[L,U,P] = lu(A);
toc
fprintf('\n')
%Solving the system n times with LU decomposition:
optsL.LT = true; %Options for linsolve
optsU.UT = true;
disp('Solving the system n times using LU decomposition')
tic
for ii=1:n
x1 = linsolve(U, linsolve(L,P*b,optsL) , optsU);
end
toc
fprintf('\n')
%Computing inverse of A:
disp('Computing inverse of A')
tic
Ainv = inv(A);
toc
fprintf('\n')
%Solving the system n times with Ainv:
disp('Solving the system n times with A inv')
tic
for ii=1:n
x2 = Ainv*b;
end
toc
fprintf('\n')
disp('Residuals')
disp(norm(b-A*x1))
disp(norm(b-A*x2))
disp('Condition number of A')
disp(cond(A))
Untuk matriks dengan angka kondisi sekitar 450, residualnya adalah dalam kedua kasus, tetapi dibutuhkan 19 detik untuk menyelesaikan sistem n kali menggunakan dekomposisi LU, sedangkan menggunakan inversi A hanya dibutuhkan 9 detik.
Ax=b
dengan hal yang samaA
dan cukup kecil untuk mengambil kebalikannya, Anda dapat menyimpan faktorisasi LU dan menggunakannya kembali.Jawaban:
Biasanya ada beberapa alasan utama untuk lebih suka memecahkan sistem linear sehubungan dengan menggunakan invers. Secara singkat:
Bagaimanapun, seperti yang dikatakan @ChristianClason dalam komentar, bisa jadi ada beberapa kasus di mana penggunaan invers adalah pilihan yang baik.
Dalam catatan / artikel oleh Alex Druinsky, Sivan Toledo, How Accurate is inv (A) * b? ada beberapa pertimbangan tentang masalah ini.
Jadi, peluang untuk menggunakan atau tidak, kebalikannya bergantung pada aplikasi, semoga Anda dapat memeriksa artikel dan melihat apakah Anda memenuhi syarat untuk mendapatkan stabilitas mundur atau jika Anda tidak membutuhkannya.
Secara umum, menurut saya, lebih aman menyelesaikan sistem linear.
sumber
SpecialMatrices.jl
Namun, katakanlah kita ingin membalikkan matriks.
\
IterativeSolvers.jl
Seperti yang telah disebutkan orang lain, angka kondisi dan kesalahan numerik adalah alasan lain, tetapi fakta bahwa kebalikan dari matriks jarang padat memberikan sangat jelas "ini adalah ide yang buruk".
sumber