Implemente a função Cramer(matriz, vetor) que calcule as raízes de um sistema de 3 equações e 3 incógnitas pela Regra de Cramer e retorna a solução na forma de um vetor. Se não houver solução para o sistema, deve imprimir uma mensagem de erro e retornar um vetor vazio ([]). Sua função pode (e deve) chamar a função det(matriz) que retorna o valor do determinante da matriz. Exemplo

Passo 1

Beleza, vamos resolver esse exercício juntos! A gente precisa implementar a função Cramer(matriz, vetor) que vai encontrar as raízes de um sistema de 3 equações com 3 incógnitas usando a Regra de Cramer. A matéria que vamos usar aqui é Álgebra Linear, especificamente o conceito de determinantes e como a Regra de Cramer nos ajuda a resolver sistemas lineares. Para isso, vamos precisar calcular determinantes de matrizes 3x3 e entender como substituir colunas para encontrar as soluções das incógnitas.

Passo 2

Primeiro, vamos entender o que é a Regra de Cramer. Ela é uma técnica que permite resolver sistemas de equações lineares usando determinantes. Para um sistema de 3 equações com 3 incógnitas, a solução pode ser encontrada dividindo o determinante da matriz dos coeficientes pelo determinante da matriz original, mas fazendo substituições específicas para cada incógnita.

Passo 3

Vamos considerar a matriz dos coeficientes e o vetor dos termos independentes:

$$

\cdot

$$
Aqui, são os coeficientes das incógnitas , e são os termos independentes.

Passo 4

Para aplicar a Regra de Cramer, precisamos calcular o determinante da matriz dos coeficientes, que chamaremos de :
Se , o sistema tem uma única solução e podemos encontrar usando:
Onde são os determinantes obtidos ao substituir, respectivamente, a coluna de pelo vetor dos termos independentes.

Passo 5

Vamos detalhar como calcular . Substituímos a primeira coluna da matriz original pelo vetor dos termos independentes:
De maneira similar, fazemos isso para e :

Passo 6

Agora, vamos implementar isso em uma função Cramer(matriz, vetor) em Python. A função vai:
  1. Calcular o determinante da matriz original.
  2. Se , retorna um erro dizendo que não há solução única.
  3. Caso contrário, calcula substituindo as colunas correspondentes.
  4. Calcula as soluções e retorna como um vetor.

Passo 7

Para calcular o determinante de uma matriz 3x3, podemos usar a regra de Sarrus ou a expansão de Laplace. Aqui, vamos usar a regra de Sarrus para simplificar:
Vamos implementar essa fórmula na função det(matriz) que será chamada pela função Cramer.

Passo 8

Aqui está a implementação das funções em Python:
def det(matriz):
    a, b, c = matriz[0]
    d, e, f = matriz[1]
    g, h, i = matriz[2]
    return a*(e*i - f*h) - b*(d*i - f*g) + c*(d*h - e*g)

def Cramer(matriz, vetor):
    D = det(matriz)
    if D == 0:
        print("Erro: O sistema não tem solução única.")
        return []
    
    # Substituir a coluna de x
    matriz_x = [
        [vetor[0], matriz[0][1], matriz[0][2]],
        [vetor[1], matriz[1][1], matriz[1][2]],
        [vetor[2], matriz[2][1], matriz[2][2]]
    ]
    D_x = det(matriz_x)
    
    # Substituir a coluna de y
    matriz_y = [
        [matriz[0][0], vetor[0], matriz[0][2]],
        [matriz[1][0], vetor[1], matriz[1][2]],
        [matriz[2][0], vetor[2], matriz[2][2]]
    ]
    D_y = det(matriz_y)
    
    # Substituir a coluna de z
    matriz_z = [
        [matriz[0][0], matriz[0][1], vetor[0]],
        [matriz[1][0], matriz[1][1], vetor[1]],
        [matriz[2][0], matriz[2][1], vetor[2]]
    ]
    D_z = det(matriz_z)
    
    x = D_x / D
    y = D_y / D
    z = D_z / D
    
    return [x, y, z]

Passo 9

Vamos testar a função com o exemplo fornecido:

$$

\cdot

$$
Chamando a função:
matriz = [
    [1, 2, 3],
    [5, 5, 5],
    [6, 2, 1]
]
vetor = [1, 2, 7]

solucao = Cramer(matriz, vetor)
print(solucao)

Resposta

Ao executar o código, a solução do sistema é:
[ -1.0, 1.0, 2.0 ]
Ou seja, , e .

Exercícios relacionados

Leia um número A real positivo. Calcule sua raiz real utilizando o método babilônico indo até a interação ( ). Considere, por hipótese, .
Crie um algoritmo que verifique se existe alguma raiz na equação Cx+D no intervalor [-1.000, 1.000]. Seu algoritmo deve ler os coeficientes A, B, C e D. Dica: incremente o valor de x de uma unidade a cada interação e verifique se houve uma mudança de sinal no resultado da equação, se o sinal mudou, existe a ocorrência de uma raiz (não é necessário calcular a raiz).
Implemente a função area_triangulo(matriz). O parâmetro matriz é uma matriz que contém as coordenadas x e y do pontos do triângulo. Utilize fórmula de Heron para calcular a área.
Onde é o semiperímetro do triângulo e a, b e c são os comprimento dos lados do triângulo.
Leia um arquivo entrada.txt e troque todas as letras minúsculas por maiúsculas e vice-versa. Grave o resultado em um arquivo saida.txt.