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.