Questão 1: Usando o pacote numPy, escreva uma função recursiva que calcule o determinante de uma matriz
usando o teorema de Laplace.
Passo 1
O enunciado pede uma função recursiva em Python usando o pacote numPy para calcular o determinante de uma matriz n×n via teorema de Laplace. O conteúdo envolve determinantes, expansão de Laplace, manipulação de submatrizes com numpy.delete e recursão.
Passo 2
Começamos definindo o caso base da recursão: se a matriz for 1×1 retornamos o único elemento; se for 2×2, aplicamos a fórmula ad−bc para acelerar.
Passo 3
Para o caso geral (n>2) percorremos cada coluna j da primeira linha, calculamos o sinal do cofator como (-1)**j, extraímos a submatriz menor removendo linha 0 e coluna j com numpy.delete e chamamos recursivamente a função para obter o determinante da menor.
Passo 4
Acumulamos em uma variável det o valor sign * A[0,j] * det_recursive(submatriz), e ao final retornamos det como o determinante da matriz original.
Resposta
import numpy as np
def det_recursive(A):
A = np.array(A)
n = A.shape[0]
# Caso base n=1
if n == 1:
return A[0, 0]
# Caso base n=2 para evitar recursão desnecessária
if n == 2:
return A[0, 0] * A[1, 1] - A[0, 1] * A[1, 0]
det = 0
# Expansão de Laplace pela primeira linha
for j in range(n):
sign = (-1) ** j
# Remove linha 0 e coluna j para formar a submatriz menor
minor = np.delete(np.delete(A, 0, axis=0), j, axis=1)
# Soma do cofactor vezes o determinante da submatriz
det += sign * A[0, j] * det_recursive(minor)
return det
A = np.array(A)
n = A.shape[0]
# Caso base n=1
if n == 1:
return A[0, 0]
# Caso base n=2 para evitar recursão desnecessária
if n == 2:
return A[0, 0] * A[1, 1] - A[0, 1] * A[1, 0]
det = 0
# Expansão de Laplace pela primeira linha
for j in range(n):
sign = (-1) ** j
# Remove linha 0 e coluna j para formar a submatriz menor
minor = np.delete(np.delete(A, 0, axis=0), j, axis=1)
# Soma do cofactor vezes o determinante da submatriz
det += sign * A[0, j] * det_recursive(minor)
return det