O cálculo do determinante de matrizes quadradas pode ser feito usando o método de Eliminação de Gauss.
Elabore um código no Scilab que dada uma matriz quadrada, calcule o seu determinante (cole o código na resposta). Faça o programa de tal forma que ele exiba a matriz final de cada etapa do método e por fim o resultado do determinante;

Passo 1

Beleza, recapeando: o exercício pede pra gente criar um script em Scilab que, dada uma matriz quadrada, calcule o determinante usando Eliminação de Gauss. Além disso, o programa deve mostrar a matriz resultante após cada etapa de eliminação e, no final, imprimir o valor do determinante.
Conteúdo: método de Eliminação de Gauss e propriedades de determinante (troca de linhas muda sinal, matriz triangular → produto da diagonal).

Passo 2

Vamos lembrar a teoria:
  1. Ao usar Eliminação de Gauss, você transforma a matriz em forma triangular superior aplicando operações de linha do tipo “linha i ← linha i – fator·linha k”.
  2. Essas operações de subtração não alteram o valor do determinante.
  3. Se você precisar trocar duas linhas para evitar um pivô zero, isso multiplica o determinante por –1.
  4. No fim, com a matriz em triangular superior, o determinante é simplesmente o produto dos elementos da diagonal. Se fizemos trocas, a gente ajusta o sinal.

Passo 3

Algoritmo passo a passo:
  1. Ler a matriz A e pegar seu tamanho n×n.
  2. Inicializar uma variável detSinal = 1 (vai virar –1 toda vez que trocarmos de linha).
  3. Para cada pivô k = 1 até n–1:
    a) Se A(k,k) = 0, procurar abaixo uma linha i > k com A(i,k) ≠ 0. Se achar, trocar linha k com linha i e fazer detSinal = –detSinal. Exibir a matriz.
    b) Usar o pivô A(k,k) para eliminar todos os elementos A(i,k) com i>k: calcular fator = A(i,k)/A(k,k) e fazer A(i,k:n) = A(i,k:n) – fator·A(k,k:n). Depois de cada coluna eliminada, exibir a matriz.
  4. No final, o determinante é detSinal · ∏_{i=1}^n A(i,i). Exibir esse valor.

Resposta

function detA = detGauss(A)
  // Obtém tamanho
  [n, m] = size(A);
  if n <> m then
    error("A deve ser quadrada");
  end
  detSinal = 1;
  // Eliminação de Gauss
  for k = 1:n-1
    // 1) Lidar com pivô zero
    if A(k,k) == 0 then
      for i = k+1:n
        if A(i,k) <> 0 then
          // troca linhas k e i
          A([k i], :) = A([i k], :);
          detSinal = -detSinal;
          mprintf("Após trocar linhas %d e %d:\n", k, i);
          disp(A);
          break;
        end
      end
    end
    // 2) Eliminação abaixo do pivô
    pivô = A(k,k);
    for i = k+1:n
      fator = A(i,k) / pivô;
      A(i, k:n) = A(i, k:n) - fator * A(k, k:n);
    end
    mprintf("Após eliminar coluna %d:\n", k);
    disp(A);
  end
  // 3) Calcula determinante como produto da diagonal ajustado pelo sinal
  detA = detSinal * prod(diag(A));
  mprintf("Determinante = %f\n", detA);
endfunction

// Exemplo de uso:
// A = [2 1 3; 4 5 6; 7 8 9];
// detGauss(A);

Exercícios relacionados