fork download
  1. function B = compute_inverse(A)
  2. [n, m] = size(A);
  3. if n ~= m
  4. error('Matricea trebuie să fie pătratică.');
  5. end
  6.  
  7. % Construim matricea augmentată [A | I]
  8. I = eye(n);
  9. Aug = [A, I];
  10.  
  11. % Aplicăm eliminarea Gauss-Jordan
  12. for i = 1:n
  13. % Alegem pivotul maxim pentru stabilitate numerică
  14. [~, max_row] = max(abs(Aug(i:n, i)));
  15. max_row = max_row + (i - 1);
  16. if max_row ~= i
  17. Aug([i, max_row], :) = Aug([max_row, i], :);
  18. end
  19.  
  20. % Normalizăm pivotul
  21. Aug(i, :) = Aug(i, :) / Aug(i, i);
  22.  
  23. % Eliminăm toate celelalte valori de pe coloană
  24. for j = 1:n
  25. if j ~= i
  26. Aug(j, :) = Aug(j, :) - Aug(j, i) * Aug(i, :);
  27. end
  28. end
  29. end
  30.  
  31. % Partea dreaptă este inversa lui A
  32. B = Aug(:, n+1:end);
  33. end
  34.  
Success #stdin #stdout 0.11s 46692KB
stdin
Standard input is empty
stdout
Standard output is empty