function B = compute_inverse(A)
[n, m] = size(A);
if n ~= m
error('Matricea trebuie să fie pătratică.');
end
% Construim matricea augmentată [A | I]
I = eye(n);
Aug = [A, I];
% Aplicăm eliminarea Gauss-Jordan
for i = 1:n
% Alegem pivotul maxim pentru stabilitate numerică
[~
, max_row
] = max
(abs(Aug
(i
:n
, i
))); max_row = max_row + (i - 1);
if max_row ~= i
Aug([i, max_row], :) = Aug([max_row, i], :);
end
% Normalizăm pivotul
Aug(i, :) = Aug(i, :) / Aug(i, i);
% Eliminăm toate celelalte valori de pe coloană
for j = 1:n
if j ~= i
Aug(j, :) = Aug(j, :) - Aug(j, i) * Aug(i, :);
end
end
end
% Partea dreaptă este inversa lui A
B = Aug(:, n+1:end);
end
ZnVuY3Rpb24gQiA9IGNvbXB1dGVfaW52ZXJzZShBKQogICAgW24sIG1dID0gc2l6ZShBKTsKICAgIGlmIG4gfj0gbQogICAgICAgIGVycm9yKCdNYXRyaWNlYSB0cmVidWllIHPEgyBmaWUgcMSDdHJhdGljxIMuJyk7CiAgICBlbmQKICAgIAogICAgJSBDb25zdHJ1aW0gbWF0cmljZWEgYXVnbWVudGF0xIMgW0EgfCBJXQogICAgSSA9IGV5ZShuKTsKICAgIEF1ZyA9IFtBLCBJXTsKICAgIAogICAgJSBBcGxpY8SDbSBlbGltaW5hcmVhIEdhdXNzLUpvcmRhbgogICAgZm9yIGkgPSAxOm4KICAgICAgICAlIEFsZWdlbSBwaXZvdHVsIG1heGltIHBlbnRydSBzdGFiaWxpdGF0ZSBudW1lcmljxIMKICAgICAgICBbfiwgbWF4X3Jvd10gPSBtYXgoYWJzKEF1ZyhpOm4sIGkpKSk7CiAgICAgICAgbWF4X3JvdyA9IG1heF9yb3cgKyAoaSAtIDEpOwogICAgICAgIGlmIG1heF9yb3cgfj0gaQogICAgICAgICAgICBBdWcoW2ksIG1heF9yb3ddLCA6KSA9IEF1ZyhbbWF4X3JvdywgaV0sIDopOwogICAgICAgIGVuZAogICAgICAgIAogICAgICAgICUgTm9ybWFsaXrEg20gcGl2b3R1bAogICAgICAgIEF1ZyhpLCA6KSA9IEF1ZyhpLCA6KSAvIEF1ZyhpLCBpKTsKICAgICAgICAKICAgICAgICAlIEVsaW1pbsSDbSB0b2F0ZSBjZWxlbGFsdGUgdmFsb3JpIGRlIHBlIGNvbG9hbsSDCiAgICAgICAgZm9yIGogPSAxOm4KICAgICAgICAgICAgaWYgaiB+PSBpCiAgICAgICAgICAgICAgICBBdWcoaiwgOikgPSBBdWcoaiwgOikgLSBBdWcoaiwgaSkgKiBBdWcoaSwgOik7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCiAgICAKICAgICUgUGFydGVhIGRyZWFwdMSDIGVzdGUgaW52ZXJzYSBsdWkgQQogICAgQiA9IEF1Zyg6LCBuKzE6ZW5kKTsKZW5kCg==