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 sama A
dan cukup kecil untuk mengambil kebalikannya, Anda dapat menyimpan faktorisasi LU dan menggunakannya kembali.