Baixe o app para aproveitar ainda mais
Prévia do material em texto
MÉTODO DE GAUSS - SEIDEL O método de Gauss-Seidel é uma modificação do método interativo de Gauss-Jacobi, nesse método o sistema linear pode ser escrito na forma equivalente a por separação da diagonal. A ideia é a de que no cálculo da (k+1)-ésima aproximação pelo processo iterativo quer calcular , por: Neste método, para calcular , usa-se os valores antigos , i < j, que já foram calculados. O processo iterativo é repetido várias vezes até que o vetor esteja muito próximo do vetor . Considerando a norma de vetores, e dada uma precisão, o vetor será escolhido como uma solução aproximada da solução exata se: (erro relativo), ou (erro absoluto). Esses são os critérios de parada mais utilizados. Exemplo: Resolva o sistema linear abaixo pelo método de Gauss-Seidel com e Solução: O processo iterativo é: Como . (k=0): Fazendo o teste de parada com o erro absoluto, obtemos: Como o valor máximo da diferença entre os pontos ainda é maior que o erro, as iterações deveram ser feitas até que valor seja menor que o erro. Algoritmo de Gauss – Seidel Clc Clear all % Receba a ordem do sistema ord = input('Ordem da matriz: '); % Receba a matriz dos coeficientes A = input('matriz dos coeficientes: '); % Receba o vetor x inicial X = input('Entre com o vetor X inicial: '); % Receba o vetor dos termos independentes de b B = input('Entre com o vetor B: '); % Receba o erro pré-estabelecido tol = input('Entre com a tolerância: '); % Defina o numero máximo de iterações max = input('Entre com o número máximo de iterações: '); k = 1; for i = 1:ord for j = 1:ord if i == j % matriz que armazena os termos que multiplicam por xi D(i,j) = 0; % matriz que armazena os termos que somam com D(i,j) I(i,1) = B(i,1)/A(i,i); else D(i,j) =-A(i,j)/A(i,i); end end end while (k < max) X1 = X; for i = 1:ord X1(i,1) = D(i,:)*X1 + I(i,1); %(Obs. A expressão D(i,:)*X1 realiza uma multiplicação entre dois vetores (uma linha da matriz e o vetor X)) end for i = 1:ord ERX(i,1)= abs((X1(i,1)-X(i,1))/X1(i,1))*100; mtol(i,1)=tol; end if ERX < mtol fprintf('%1.5f\n',X1); break end X = X1; k = k+1; end Referência Bibliográfica: AMARAL, H. M. C. Análise e Métodos Numéricos em Engenharia. 1 ed. São Luís: Editora UEMA, 2008.
Compartilhar