function A = eliminazione_Gauss( A ) function M = scambia_righe( M , i1 , i2 ) M( [i1;i2] , : ) = M( [i2;i1] , : ) ; % scambio righe fprintf('R%d ⇄ R%d\n', i1, i2) ; % output testuale disp( M ) ; % output matrice end function M = somma_righe( M , i , lambda , k ) M( i , : ) = M( i , : ) + lambda * M( k , : ) ; % somma righe [ n , d ] = rat( lambda ) ; % conversione razionale fprintf('R%d ← R%d%+d/%d×R%d\n', i, i, n, d, k) ; % output testuale disp( M ) ; % output matrice end function M = scambio_pivot( M , j ) possibili_pivot = M( (j+1):end , j ) ; % estrazione colonna j [ ~ , k ] = max( abs( possibili_pivot ) ) ; % ricerca pivot "migliore" M = scambia_righe( M , j , j+k ) ; % scambio righe pivot end % Funzione per il test x = 0 is_zero = @(x) abs(x) < 10*eps ; m = size(A, 1) ; % Ciclo sulle colonne da ridurre a 0 for j = 1 : m-1 pivot = A( j , j ) ; % il pivot è l'elemento diagonale % Caso di pivot nullo => nuovo pivot (se possibile) if is_zero( pivot ) A = scambio_pivot( A , j ) ; pivot = A( j , j ) ; end % Ciclo sugli elementi da eliminare nella colonna j for i = j+1 : m lambda = -A(i,j) / pivot ; % coefficiente scalare per l'eliminazione if ~is_zero( lambda ) % se lambda = 0 l'eliminazione non serve A = somma_righe( A , i , lambda , j ) ; % operazione somma righe end end end end