Questão 2 - [ 2.50 ponto(s) ] - Escreva um programa em Python capaz de resolver o sistema linear utilizando o método de Jacobi até a (10) décima iteração.
\begin{aligned} 10 x_{1}+2 x_{2}+x_{3} & =14 \\\\ 2 x_{1}+15 x_{2}-x_{3} & =-12 \\\ x_{1}-x_{2}+12 x_{3} & =20 \end{aligned}

Passo 1

O enunciado pede um programa em Python que resolva o sistema
\begin{cases} 10x_{1} + 2x_{2} + x_{3} = 14,\\\\ 2x_{1} + 15x_{2} - x_{3} = -12,\\\ x_{1} - x_{2} + 12x_{3} = 20 \end{cases}
usando o método iterativo de Jacobi com exatamente 10 iterações. Vamos usar a forma de iteração
x^{(k+1)} = D^{-1}(b - (L+U)x^{(k)})
onde D é a diagonal de A, e L,U são as partes estritamente triangular inferior e superior de A.

Passo 2

Reescrevemos cada equação isolando a incógnita principal:
x_{1} = \frac{14 - 2x_{2} - x_{3}}{10},\quad x_{2} = \frac{-12 - 2x_{1} + x_{3}}{15},\quad x_{3} = \frac{20 - x_{1} + x_{2}}{12}.
Essas fórmulas serão usadas para atualizar simultaneamente x_{1},x_{2},x_{3} a cada iteração.

Passo 3

Definimos um palpite inicial. O mais comum é escolher
x^{(0)} = (0,0,0).
Depois, em cada iteração k=0,1,\dots,9, calculamos
\begin{aligned} x_{1}^{(k+1)} &= \frac{14 - 2x_{2}^{(k)} - x_{3}^{(k)}}{10},\\\ x_{2}^{(k+1)} &= \frac{-12 - 2x_{1}^{(k)} + x_{3}^{(k)}}{15},\\\ x_{3}^{(k+1)} &= \frac{20 - x_{1}^{(k)} + x_{2}^{(k)}}{12}. \end{aligned}

Passo 4

Vamos agora escrever o programa em Python. Nele:
  1. Inicializamos a lista ou tupla do chute inicial.
  2. Fazemos um laço for de 1 até 10.
  3. Em cada passo, criamos novas variáveis segundo as fórmulas de Jacobi.
  4. Atualizamos o vetor solução e, opcionalmente, imprimimos o valor de cada iteração.

Resposta

def jacobi(\(n_iter =10\)):
 # Coeficientes do sistema
 # A x = b
 # A = [[10, 2, 1],
 # [ 2,15,-1],
 # [ 1,-1,12]]
 b = [14, -12, 20]
 # chute inicial x^(0)
 \(x_old\) = [0.0, 0.0, 0.0]

 for k in range(1, \(n_iter +1\)):
 x\(1=\) (b[0] - 2*\(x_old\)[1] - 1*\(x_old\)[2]) / 10
 x\(2=\) (b[1] - 2*\(x_old\)[0] \(+1\)*\(x_old\)[2]) / 15
 x\(3=\) (b[2] - 1*\(x_old\)[0] \(+1\)*\(x_old\)[1]) / 12

 # atualiza para próxima iteração
 \(x_old\) = [x1, x2, x3]

 # exibe iteração e valores
 print(f"Iter {k:2d}: x1 = {x1:.6f}, x2 = {x2:.6f}, x3 = {x3:.6f}")

 return \(x_old\)

# Executando 10 iterações de Jacobi
if __name__ \(==\) "__main__":
 sol = jacobi(10)
 print("Solução aproximada após 10 iterações:", sol)

Exercícios relacionados