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 , peça valor inicial, tolerância e número máximo de iterações, e resolva por Gauss–Seidel. Para isso, vamos precisar: . Ler dimensões e coeficientes de e . . Implementar a rotina iterativa de Gauss–Seidel. . Montar uma interface simples de input/output.
Passo 2
Implementar a função que executa Gauss–Seidel. A cada iteração, para de a , atualizamos
e checamos se
para parar.
Passo 3
Criar a interface de usuário em Python: . Perguntar . . Ler coeficientes de e entradas de . . Ler vetor inicial , tolerância e máximo de iterações. . Chamar a função de Gauss–Seidel e exibir resultado.
Passo 4
Exibir o programa completo em Python:
defgauss_seidel(A, b, x_0, tol, max_iter):
n = len(b)
x = x_0.copy()
for k inrange(1, max_iter + 1):
x_old = x.copy()
for i inrange(n):
soma_1 = sum(A[i][j] * x[j] for j inrange(i))
soma_2 = sum(A[i][j] * x_old[j] for j inrange(i + 1, n))
x[i] = (b[i] - soma_1 - soma_2) / A[i][i]
erro = max(abs(x[i] - x_old[i]) for i inrange(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
defmain():
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 inrange(n)] for i inrange(n)]
print("Digite os termos independentes b:")
b = [float(input(f"b[{i+1}]: ")) for i inrange(n)]
print("Digite o chute inicial x_0:")
x_0 = [float(input(f"x_0[{i+1}]: ")) for i inrange(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 inenumerate(sol, start=1):
print(f"x[{i}] = {xi:.6f}")
if __name__ == "__main__":
main()
Passo 5
Testar com um exemplo clássico:
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.