Considere o código abaixo:
function , tol, max_iter)
;
;
x_antigo=x;
for iter=1:max_iter
for :n
sum1= ;
sum2= ;
sum1-sum2)/A(i,i);
end
if norm(x-x_antigo,inf)<tol then
disp(Convergência atingida na iteração +string(iter));
return
end
x_antigo=x;
end
disp(Número máximo de iterações atingido);
endfunction
Qual a finalidade desse código?

Passo 1

Beleza, vamos começar resuminho do que tá rolando aqui. O enunciado dá uma função em Octave/MATLAB que recebe:
  • A (matriz do sistema)
  • b (vetor do lado direito)
  • X0 (palpite inicial)
  • tol (tolerância de erro)
  • max_iter (número máximo de iterações)
O conteúdo é “métodos iterativos para resolver sistemas lineares”, e o que vamos precisar entender pra resolver é:
  • Como funciona a iteração ponto a ponto (Gauss-Seidel)
  • Como montamos as somas parciais (sum1 e sum2)
  • Critério de convergência usando norma infinita

Passo 2

O primeiro trecho do código inicializa:
n = size(A,1);          % número de linhas  
x = zeros(n,1);         % cria vetor solução inicial (zeros)  
x_antigo = x;           % cópia pra checar convergência depois  
Ou seja, a gente começa chutando x = [0; 0; …; 0] (ou poderia usar X0, mas o exemplo usa zeros) e guarda esse chute pra comparar depois.

Passo 3

Dentro do loop for iter = 1:max_iter, tem outro loop for i = 1:n que faz:
sum1 = A(i,1:i-1)*x(1:i-1);      % soma dos termos já atualizados  
sum2 = A(i,i+1:n)*x(i+1:n);      % soma dos termos ainda antigos  
x(i) = (b(i) - sum1 - sum2)/A(i,i);  
Teoria rápida: no método de Gauss-Seidel, pra calcular x(i) a cada passo a gente usa os valores já atualizados de x(1),…,x(i-1) e os antigos de x(i+1),…,x(n). Por isso tem essas duas somas.

Passo 4

Depois de atualizar todo o vetor x, o código faz:
if norm(x - x_antigo, inf) < tol  
  disp("Convergência atingida na iteração " + string(iter));  
  return  
end  
x_antigo = x;  
Isso é o critério de parada: a norma infinita do erro (||x − x_antigo||∞) fica menor que a tolerância. Se converge, ele sai e avisa; senão, continua até max_iter e aí mostra “Número máximo de iterações atingido”.

Passo 5

Juntando tudo, a gente tem um método iterativo que, a cada iteração, refina x pra tentar satisfazer Ax = b. Ele para quando a diferença entre iterações é pequena (critério de convergência) ou quando atinge o máximo de iterações.

Resposta

A finalidade desse código é implementar o método de Gauss-Seidel para aproximar a solução do sistema linear Ax = b de forma iterativa, parando quando a solução converge dentro de uma tolerância ou quando atinge um número máximo de iterações.

Exercícios relacionados