Responder dúvida

Seja o primeiro a responder

Questão sobre eliminação de gauss python

Python NumPy

Afim de estudar o comportamento de sistemas mal-condicionados, iremos resolver sistemas a partir da eliminação de Gauss. Para isso, a sua tarefa é ler uma matriz de ordem n e então encontrar a solução do sistema associado à essa matriz utilizando o método da eliminação para o mesmo.
Porém, como estamos trabalhando com sistemas que podem ser mal-condicionados, temos que verificar o seu condicionamento para aplicar o método, e termos indício da nossa resposta para o vetor solução. Para encontrarmos o número de condicionamento da matriz, multiplicamos o valor das normas matriciais (utilize a norma infinito) da própria matriz e da sua inversa, considere que as matrizes passadas serão não-singulares.
Aplique o método de Gauss-Jordan muito utilizado em álgebra linear para encontrar a inversa da matriz, relembramos que a primeira parte desse método é o escalonamento da matriz, ou seja, a eliminação de Gauss (não será necessário aplicar o pivoteamento, considere que a matriz tem pivôs diferentes de zero e suficientemente grandes).
Encontre a solução do sistema por esse caminho e imprima a matriz inversa com a mensagem inicial: “A matriz inversa de A é:”.
Calcule as normas infinito de ambas as matrizes para encontrar o número de condicionamento de A e o imprima com a mensagem: “O número de condição é:”.
Caso esse número seja maior que 1000, imprima a seguinte mensagem: “Há indícios de mal-condicionamento.”, caso contrário imprima o seguinte: “Não há indícios de mal-condicionamento.”.
Utilize a seguinte linha de código em repetição para tabelar os valores encontrados que satisfazem o sistema de equações: print("x", i, " ", f’{solucao[i]:.2f}’, sep="") E para imprimir a matriz da forma desejada, utilize a seguinte linha de código em repetição para cada elemento matricial: print(f’{matriz[i][j]:.2f}’, end=” ”)
Os valores de entrada estão na seguinte ordem: Ordem n da matriz; Valores dos coeficientes matriciais de A; Valores do vetor de termos independentes b. ​
ATENÇÃO: para essa questão, é proibido o uso de funções que aplicam métodos diretamente. Utilize a biblioteca Numpy (opcional) apenas para declaração e manipulação de matrizes.
Obs.: imprima todos os valores numéricos com 2 casas decimais de precisão.

Exemplo de entrada 1: 2
1.001
1
1
1.0001
2
2.1
Exemplo de saída 1:
A matriz inversa de A é:

909.10 -909.01
-909.01 909.92

O número de condição é 3639.67
Há indícios de mal-condicionamento

x0 -90.72
x1 92.81

Exemplo de entrada 2:
3
4.16
-1.83
2.96
3.62
8.03
-2.66
1.86
1.52
3.74
12.05
-20.73
10.46

Exemplo de saída 2:
A matriz inversa de A é:

0.23 0.08 -0.13
-0.13 0.07 0.15
-0.06 -0.07 0.27

O número de condição é 6.23
Não há indícios de mal-condicionamento

x0 -0.15
x1 -1.38
x2 3.43


Eu fiz o código mas está dando erro, pode me ajudar a consertar?

def gauss_elimination(matriz, n):
    for i in range(n):
        
        pivot = matriz[i][i]
        for j in range(i + 1, n):
            if abs(matriz[j][i]) > abs(pivot):
                matriz[i], matriz[j] = matriz[j], matriz[i]
                pivot = matriz[i][i]

        
        for j in range(i + 1, n):
            ratio = matriz[j][i] / matriz[i][i]
            for k in range(n + 1):
                matriz[j][k] -= ratio * matriz[i][k]

   
    for i in range(n):
        divisor = matriz[i][i]
        for j in range(n + 1):
            matriz[i][j] /= divisor

def calc_norm_inf(matriz, n):
    norm_inf = 0
    for i in range(n):
        row_sum = sum(abs(matriz[i][j]) for j in range(n))
        if row_sum > norm_inf:
            norm_inf = row_sum
    return norm_inf

def main():
    n = int(input())  
    matriz = []
    for _ in range(n):
        linha = list(map(float, input().split()))
        matriz.append(linha + [0.0])  

    
    b = list(map(float, input().split()))

    for i in range(n):
        matriz[i][-1] = b[i]

    
    gauss_elimination(matriz, n)

    
    matriz_inversa = [linha[n:] for linha in matriz]

    norm_a = calc_norm_inf(matriz, n)
    norm_inv_a = calc_norm_inf(matriz_inversa, n)
    condicao = norm_a * norm_inv_a

    print("A matriz inversa de A é:")
    for i in range(n):
        for j in range(n):
            print(f"{matriz_inversa[i][j]:.2f}", end=" ")
        print()

    print(f"O número de condição é: {condicao:.2f}")

    if condicao > 1000:
        print("Há indícios de mal-condicionamento.")
    else:
        print("Não há indícios de mal-condicionamento.")

   
    solucao = [linha[-1] for linha in matriz]
    for i in range(n):
        print(f"x{i} {solucao[i]:.2f}")

if __name__ == "__main__":
    main()

Foto de Eduarda A.
Eduarda perguntou há 10 meses