(* Método de Gauss - Seidel *)

(*Introduzir matriz 2  X 2 e vector b *)

A = {{-2, 1}, {1, 1/2}}; b = {3, 3};

If[A[[1, 2]] ≠ 0, 
        m1 = A[[1, 1]]/A[[1, 2]];  
        b1 =  b[[1]]/A[[1, 2]] ; recta1[t_] = b1 - m1  t]; 
      m2 = A[[2, 1]]/A[[2, 2]];  b2 =  b[[2]]/A[[2, 2]] ; 
      recta2[t_] = b2 - m2 t;
Sol = 
        LinearSolve[A, b];
Graf1 = 
          Plot[{recta1[x], recta2[x]}, {x, Sol[[1]] - 3, 
              Sol[[1]] + 3}, AxesLabel -> {"x", "y"}, 
            PlotStyle -> {{Thickness[0.01], 
                  RGBColor[1, 0, 0]}, {Thickness[0.01], 
                  RGBColor[1, 0, 0]}}];

M = A; 
      M[[1, 2]] = 0; NN = {{0, A[[1, 2]]}, {0, 0}}; 
      CC = Inverse[M] . NN

Raio = Max[Abs[N[Eigenvalues[CC]]]]; 
    Print["Raio Espectral=", Raio]

<< Graphics`Arrow`

(*Introduzir a aproximação inicial*) 
k = 0; 
      x = {3, 2}; Linha = {};
Continua = S; 
      erro = Max[Abs[x[[1]] - Sol[[1]]], 
          Abs[x[[2]] - Sol[[2]]]];

While[Continua == S,
  
k = k + 1; 
        xnovo = {0, 0}; 
        xnovo[[1]] = (b[[1]] - x[[2]] A[[1, 2]])/
            A[[1, 1]]; 
        xnovo[[2]] = (b[[2]] - xnovo[[1]] A[[2, 1]])/
            A[[2, 2]]; 
Seta = 
          Arrow[x, xnovo]; 
AppendTo[Linha, 
          Seta]; 
erronovo = 
          Max[Abs[xnovo[[1]] - Sol[[1]]], 
            Abs[xnovo[[2]] - Sol[[2]]]]; 
CAC = 
          erronovo/erro; 
Print["k=", 
          k, "  iterada=", N[xnovo], "  erro=", 
          N[erronovo],  "  CAC=", N[CAC]]; 
Graf2 = 
          Graphics[{RGBColor[0, 0, 1], Thickness[0.005], Linha}]; 
        Show[Graf1, Graf2]; 
Continua = 
          Input["mais uma iteração?"]; x = xnovo; 
        erro = erronovo]