function Minv = inverte_matriz_M(M)
nb = size(M,2);
fprintf(2,'calculando a inversa da matriz de momentos\n');
Minv = inv(M);
fprintf(2,'%.1f elementos nao nulos por coluna da inversa\n',nnz(Minv)/nb);
n_itr = 1;
R_norm_ant = Inf;
for i = 1:n_itr
    fprintf(2,'calculando o residuo da inversao \n');
    R = eye(nb) - M*Minv;
    R_norm = norm(R);
    fprintf(2,'norma do residuo de M inversa = %8.3e\n',R_norm);
    if (i > 0) && (R_norm > 0.75*R_norm_ant)
        Minv = Minv_ant; break
    end
    if i == n_itr
        break
    end
    Minv_ant = Minv;
    R_norm_ant = R_norm;
    C = M\R;
    fprintf(2,'norma da ajuste de M inversa = %8.3e\n',norm(C));
    Minv = Minv + C;
end
