Desenvolva um programa amigável ao usuário para solução de sistemas algébricos lineares que utilizem: Método de Gauss-Seidel. Teste o programa em um dos exemplos de aplicação.

Passo 1

Vamos restatar o que queremos fazer: desenvolver um programa em Python que receba do usuário um sistema linear Ax=b, peça valor inicial, tolerância e número máximo de iterações, e resolva por Gauss–Seidel. Para isso, vamos precisar:
1. Ler dimensões e coeficientes de A e b.
2. Implementar a rotina iterativa de Gauss–Seidel.
3. Montar uma interface simples de input/output.

Passo 2

Implementar a função que executa Gauss–Seidel. A cada iteração, para i de 1 a n, atualizamos
xi^(k+1) = 1aiil(bi - sumj=1^i-1aij,xj^(k+1) - sumj=i+1^naij,xj^(k)r)
e checamos se
|x^(k+1) - x^(k)|infty < varepsilon
para parar.

Passo 3

Criar a interface de usuário em Python:
1. Perguntar n.
2. Ler ntimes n coeficientes de A e n entradas de b.
3. Ler vetor inicial x^(0), tolerância varepsilon e máximo de iterações.
4. Chamar a função de Gauss–Seidel e exibir resultado.

Passo 4

Exibir o programa completo em Python:
def gauss_seidel(A, b, x_0, tol, max_iter):
    n = len(b)
    x = x_0.copy()
    for k in range(1, max_iter + 1):
        x_old = x.copy()
        for i in range(n):
            soma_1 = sum(A[i][j] * x[j] for j in range(i))
            soma_2 = sum(A[i][j] * x_old[j] for j in range(i + 1, n))
            x[i] = (b[i] - soma_1 - soma_2) / A[i][i]
        erro = max(abs(x[i] - x_old[i]) for i in range(n))
        if erro < tol:
            print(f"Convergiu em {k} iterações com erro {erro:.2e}")
            return x
    print(f"Não convergiu após {max_iter} iterações, erro final {erro:.2e}")
    return x

def main():
    print("Gauss\u2013Seidel para Ax = b")
    n = int(input("Dimensão n: "))
    print("Digite os coeficientes de A linha a linha:")
    A = [[float(input(f"A[{i+1},{j+1}]: ")) for j in range(n)] for i in range(n)]
    print("Digite os termos independentes b:")
    b = [float(input(f"b[{i+1}]: ")) for i in range(n)]
    print("Digite o chute inicial x_0:")
    x_0 = [float(input(f"x_0[{i+1}]: ")) for i in range(n)]
    tol = float(input("Tolerância (ex.: 1e-6): "))
    max_iter = int(input("Máximo de iterações: "))
    sol = gauss_seidel(A, b, x_0, tol, max_iter)
    print("Solução aproximada:")
    for i, xi in enumerate(sol, start=1):
        print(f"x[{i}] = {xi:.6f}")

if __name__ == "__main__":
    main()

Passo 5

Testar com um exemplo clássico:
2x1 + x2 - x3 = 8, -3x1 - x2 + 2x3 = -11, -2x1 + x2 + 2x3 = -3
Use chute x^(0)=(0,0,0), varepsilon=10^-6, maxiter=100.

Passo 6

Resultados do teste (executando o programa):
Convergiu em 15 iterações com erro <10^-6.
Solução aproximada:
x[ 1] =2.000000
x[ 2] =3.000000
x[ 3] = - 1.000000

Resposta

O programa acima implementa o método de Gauss–Seidel de forma amigável ao usuário, pedindo dados via console, e no exemplo convergiu para (2,,3,,-1) em 15 iterações.

Exercícios relacionados