Escrever em Scilab uma função que dada uma matriz quadrada
calcula o determinante de
(sem usar o
do Scilab!!)
A ideia é proceder como no exercício da lista: usar a fórmula dos cofatores para cálculo de determinante chamando a função de forma recursiva.
Para isso você irá dividir em 2 casos: se
, o determinante será a própria matriz do dado de entrada. Se
, você irá computar a fórmula
onde
é o determinante (computado pela própria função) da matriz quadrada de tamanho
obtida de
tirando-se a linha 1 e a coluna
.
A ideia é proceder como no exercício da lista: usar a fórmula dos cofatores para cálculo de determinante chamando a função de forma recursiva.
Para isso você irá dividir em 2 casos: se
Passo 1
Beleza, vamos resumir o que o exercício pede. A gente precisa escrever em Scilab uma função que calcula o determinante de uma matriz quadrada
sem usar a função pronta
det(A)
. O conteúdo aqui é recursão e a fórmula de cofactores (menores). Pra resolver, vamos precisar:- Entender o caso base (quando
). - Saber construir a matriz menor (tirar a linha 1 e a coluna j).
- Aplicar a fórmula de expansão por cofactores:
Passo 2
Caso base (
):
Se a matriz tem tamanho 1×1, o determinante é simplesmente o único elemento dela.
Ou seja, se , então
.
Isso evita entrar em recursão infinita.
Se a matriz tem tamanho 1×1, o determinante é simplesmente o único elemento dela.
Ou seja, se
Isso evita entrar em recursão infinita.
Passo 3
Caso geral (
):
- A gente inicializa um acumulador
detA = 0
. - Faz um laço
for j = 1:n
para percorrer as colunas da primeira linha. - Em cada passo, monta a submatriz
de tamanho , tirando a linha 1 e a coluna j. - Em Scilab, isso dá algo como
idx = 1:n; idx(j) = []; // tira o índice j subA = A(2:$, idx); // pega da linha 2 até o fim, só nas colunas idx
- Em Scilab, isso dá algo como
- Calcula o cofactor:
, onde mydet
é a própria função recursiva. - Soma esse valor em
detA
.
Passo 4
Juntando tudo, a função em Scilab fica assim (com nome
mydet
):function detA = mydet(A)
[n, m] = size(A);
if n <> m then
error("Matriz tem que ser quadrada!");
end
// Caso base
if n == 1 then
detA = A(1,1);
return;
end
// Caso recursivo
detA = 0;
for j = 1:n
// monta submatriz A_j
idx = 1:n;
idx(j) = [];
subA = A(2:$, idx);
// soma o cofactor
cofactor = (-1)^(1+j) * A(1,j) * mydet(subA);
detA = detA + cofactor;
end
endfunction
Resposta
A função
mydet
acima implementa recursivamente a fórmula de cofactores em Scilab para calcular o determinante de uma matriz quadrada, sem usar det(A)
.