Método de Eliminação de Gauss

O Método de Eliminação de Gauss é uma técnica fundamental utilizada para resolver sistemas lineares de equações. Este método consiste em transformar um sistema linear em uma forma triangular superior, facilitando a resolução do mesmo através da substituição retroativa.

Passos Básicos Do Método

  1. Forma Triangular Superior:

    • O objetivo é transformar o sistema linear original em uma matriz triangular superior.
    • Isso é feito através de operações elementares nas linhas do sistema, sem alterar a solução do mesmo.
  2. Operações Elementares:

    • Adição múltipla de uma linha à outra.
    • Troca de duas linhas entre si.
    • Multiplicação de uma linha por um escalar não nulo.
  3. Etapa de Eliminação:

    • Para cada coluna, a ideia é eliminar os elementos abaixo da diagonal principal.
    • Isso é feito multiplicando a primeira equação pelo fator adequado e subtraindo-a das demais equações correspondentes.
  4. Etapa de Substituição Retroativa:

    • Após obter a forma triangular superior, o sistema pode ser resolvido facilmente através da substituição retroativa.
    • Começa pela última equação e resolve para a última variável, depois usa esse valor na penúltima equação, e assim por diante.

Exemplo de Aplicação Do Método de Eliminação de Gauss

Considere o seguinte sistema linear de equações:

{2x+3yz=14xy+2z=72x+2y+5z=0

Passos Básicos Do Método

  1. Forma Triangular Superior:

    Primeiro, transformamos o sistema em uma matriz aumentada:

[231141272250]

Etapa de Eliminação:

R2=R22R1

Resultado:

[231107452250] R3=R3+R1

Resultado:

[231107450541] R3=R357R2

Resultado:

[231107450087187]

Agora, temos a matriz triangular superior:

[231107450087187]
  1. Etapa de Substituição Retroativa:

    • Resolvendo a última equação:
87z=187z=18778=94 7y+4(94)=57y9=57y=14y=2 2x+3(2)(94)=12x6+94=12x244+94=12x154=12x=1+1542x=44+1542x=194x=198

Portanto, a solução do sistema é:

x=198,y=2,z=94

Código em Python

def print_matrix(a, b):
    """
    Print the augmented matrix [A|b] in a readable format.
    """
    n = len(b)
    for i in range(n):
        row = "  ".join(f"{a[i][j]:8.4f}" for j in range(n))
        print(f"[ {row} ] | {b[i]:8.4f}")
    print()

def gauss_elimination_verbose(a, b):
    """
    Solve the linear system Ax = b using Gaussian elimination with partial pivoting.
    Prints each step of the elimination and back substitution process.

    Parameters:
    a -- Coefficient matrix (list of lists, will be modified in-place)
    b -- Right-hand side vector (list, will be modified in-place)

    Returns:
    x -- Solution vector (list)
    """
    n = len(b)

    print("Initial augmented matrix:")
    print_matrix(a, b)

	# Forward Elimination
    for i in range(n):
		# Partial Pivoting: Find The Row With The Largest Value In Column I
        max_row = i + max(range(n - i), key=lambda k: abs(a[i + k][i]))
        if abs(a[max_row][i]) < 1e-12:
            raise ValueError("Matrix is singular or nearly singular")

		# Swap Rows If Needed
        if max_row != i:
            a[i], a[max_row] = a[max_row], a[i]
            b[i], b[max_row] = b[max_row], b[i]
            print(f"Swapped row {i} with row {max_row}")
            print_matrix(a, b)

		# Eliminate Entries Below The Pivot
        for j in range(i + 1, n):
            factor = a[j][i] / a[i][i]
            for k in range(i, n):
                a[j][k] -= factor * a[i][k]
            b[j] -= factor * b[i]
            print(f"Eliminated row {j} using row {i} with factor {factor:.4f}")
            print_matrix(a, b)

	# Back Substitution
    x = [0 for _ in range(n)]
    print("Back substitution:")
    for i in reversed(range(n)):
        s = sum(a[i][j] * x[j] for j in range(i + 1, n))
        x[i] = (b[i] - s) / a[i][i]
        print(f"x[{i}] = {x[i]:.4f}")

    print("\nFinal solution:", x)
    return x

if __name__ == "__main__":
    A = [
        [1, 2, 1, 1, 2],
        [0, 1, 2, 2, 3],
        [1, 0, 2, 3, 2],
        [1, 1, 1, 2, 1],
        [2, 1, 0, 1, 1]
    ]
    B = [31, 31, 27, 23, 22]

    solution = gauss_elimination_verbose([row[:] for row in A], B[:])

Extra

![[Escalonamento.pdf]]