Você está na página 1de 30

CLCULO NUMRICO

Profa. Dra. Yara de Souza Tadano yaratadano@utfpr.edu.br


Aula 11
Matlab Mtodo de Gauss-Jacobi e Gauss-Seidel
MTODO DE GAUSS-JACOBI
Vamos supor, por simplicidade, um sistema de 3 equaes e
3 incgnitas:

E1 : a11 x1 a12 x2 a13 x3 b1


E2 : a21 x1 a22 x2 a23 x3 b2
E3 : a31 x1 a32 x2 a33 x3 b3
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 3/55
MTODO DE GAUSS-JACOBI
Se os elementos da diagonal forem todos no-nulos,
possvel isolar x1 em E1; x2 em E2 e x3 em E3.

b1 a12 x22 a13 xx33


x1
a11
b2 a21 xx11 a23 xx33
x2
a22
b3 a31 xx11 a32 xx22
x3
a33
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 4/55
Mtodo de Gauss-Jacobi
De forma equivalente, podemos escrever:

b1 a12 a13
x1 x22 xx33
a11 a11 a11
b2 a21 a23
x2 x11 xx33
a22 a22 a22
b3 a31 a32
x3 x11 xx22
a33 a33 a33
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 5/55
Mtodo de Gauss-Jacobi
Para implementar, escreveremos:

b1 a12 a13
a 0
a11 a11
11
b2 a21 a23
I ; D 0
a
22 a22 a22
b3 a31 a32
0
a33 a33 a33
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 6/55
Mtodo de Gauss-Jacobi
Para implementar, escreveremos:

j a12 a13 j 1 b1
x1 0 x1
a11 a11 a11
a a23 j 1 b2
x2 21
j
0 x2
a22 a22 a22
a a32 j 1 b3
x3 j 31 0 x3
a33 a33 a33
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 7/55
Mtodo de Gauss-Jacobi
E teremos:

>> X1 = D * X + I

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 8/55
RESUMO DE COMANDOS

break Interrompe a execuo de laos for e while


clc Limpa a tela (command window)
disp Exibe o contedo de uma varivel, sem mostrar o seu nome
input Permite ao usurio inserir variveis, textos, valores, etc
sign Funo sinal: retorna o sinal de um argumento
if Condiciona execuo de comandos
else Usado com o comando if
elseif Usado com o comando if
end Usado para terminar a execuo dos comandos if,for,while
while Repete comandos enquanto condio especificada for verdadeira
fprintf Grava dados em arquivo formatado
for Repete comandos
Aulapor
7 um nmero
MATLAB dedevezes
- Zeros especificado
funes
Clculo Numrico 9/55
FORMATOS DE DADOS DE SADA

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 10/55
COMANDOS

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 11/55
Vetores e Matrizes
Colchetes so utilizados para armazenar vetores ou matrizes.

Vetor linha:
>> a = [1 2 3 4]

Vetor coluna:
>> a = [1; 2; 3; 4] ou
>> a=[1 2 3 4] ou ainda:
>> a = [1
2
3
4]
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 12/55
MATRIZ
Uma matriz pode ser armazenada por:

>> A=[a11 a12 a13; a21 a22 a23; a31 a32 a33];

Ou por:
>> A=[a11 a12 a13
a21 a22 a23
a31 a32 a33];

Ou ainda por:

>> A=[[a11 a12 a13][a21 a22 a23][a31 a32 a33]];

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 13/55
MATRIZ
Podemos acessar cada valor de uma matriz utilizando a
estrutura:

>> A(i,j)

Por exemplo:

>> A(1,1) = a11

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 14/55
Smbolo :
O : muito utilizado para manipular matrizes. Se um : for
colocado entre dois nmeros, o MATLAB ir gerar nmeros
entre eles adicionando um.

>> i = 1:5
i ser igual a 1, depois 2, depois 3, depois 4 e por ltimo 5.

Variaes interessantes seriam:


>> i = 1:0.5:3
Isto resulta em: i = 1.0 1.5 2.0 2.5 3.0
>> i = 5:-1:1
Isto resulta em: i = 5 4 3 2 1
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 15/55
Algoritmo do mtodo de Gauss-Jacobi
ENTRADA: A (matriz nn com ajj 0, j = 1, ..., n), b, aproximao
inicial x(0), preciso tol, nmero mximo de iteraes max.
SADA: soluo aproximada x(m) = [xj(m)] ou mensagem de falha.
Passo 1: Para i = 1 : n (contador das linhas da matriz)
Passo 2: Para j = 1 : n (contador das colunas da matriz)
Passo 3: Se i = j
D(i, j) = 0
I (i, 1) = B(i, 1) / A(i, i);
seno
D(i, j) = -A(i, j) / A(i, i);

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 16/55
Algoritmo do mtodo de Gauss-Jacobi

Fim dos Passos 1, 2 e 3


Passo 4: Enquanto k < nmax
X1 = D * X + I;
Passo 5: Para i = 1: n
ERx(i, 1) = abs((X1(i, 1) X(i, 1))/ X1(i, 1))*100;
mtol(i,1) = tol;
Fim Passo 5
Passo 6: Se ERx < mtol
SADA (O vetor soluo : X1)

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 17/55
Mtodo de Gauss-Jacobi

Ordem da matriz: ord

Matriz dos coeficientes: A

Vetor X inicial: X

Vetor dos termos independentes: B

Preciso: tol

Nmero mximo de iteraes: max


Aula 7 MATLAB - Zeros de funes
Clculo Numrico 18/55
Implementao
clear, clc

ord = input('Ordem da matriz:');

A = input('matriz dos coeficientes:');

X = input('Entre com o vetor X inicial:');

B = input('Entre com o vetor B:');

tol = input('Entre com a tolerncia:');

max = input('Entre com o nmero mximo de


Aula 7 MATLAB - Zeros de funes
iteraes');
Clculo Numrico 19/55
Implementao

k = 1;
for i = 1:ord
for j = 1:ord
if i == j

D(i,j) = 0;

I(i,1) = B(i,1)/A(i,i);
else
end D(i,j) =-A(i,j)/A(i,i);
end Aula 7 MATLAB - Zeros de funes
end Clculo Numrico 20/55
Implementao
While (k < max)
X1 = D*X + I;
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;
Aula 7 MATLAB - Zeros de funes
end Clculo Numrico 21/55
Exemplo 1
Considere o sistema:

3 x1 0,1x2 0,2 x3 7,85



0,1x1 7 x2 0,3 x3 19,3
0,3 x 0,2 x 10 x 71,4
1 2 3

A soluo verdadeira : x1 3, x2 2,5, x3 7


Use o Mtodo de Gauss-Jacobi para obter a soluo
aproximada com es = 0, 01%
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 22/55
Exemplo 1

A tabela abaixo apresenta os valores de x1, x2 e x3 a cada


iterao.

Iterao (j) x1(j) x2(j) x3(j)


1 2,61667 -2,75714 7,14000
2 3,00076 -2,48852 7,00636
3 3,00081 -2,49974 7,00021
4 3,00002 -2,50000 6,99998
5 3,00000 -2,50000 7,00000

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 23/55
Algoritmo do mtodo de Gauss-Seidel
ENTRADA: A (matriz nn com ajj 0, j = 1, ..., n), b, aproximao
inicial x(0), preciso tol, nmero mximo de iteraes max.
SADA: soluo aproximada x(m) = [xj(m)] ou mensagem de falha.
Passo 1: Para i = 1 : n (contador das linhas da matriz)
Passo 2: Para j = 1 : n (contador das colunas da matriz)
Passo 3: Se i = j
D(i, j) = 0
I (i, 1) = B(i, 1) / A(i, i);
seno
D(i, j) = -A(i, j) / A(i, i);

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 24/55
Algoritmo do mtodo de Gauss-Seidel
Fim dos Passos 1, 2 e 3
Passo 4: Enquanto k < nmax
X1 = X
Para i = 1:n
X1 = D * X1 + I;
Passo 5: Para i = 1: n
ERx(i, 1) = abs((X1(i, 1) X(i, 1))/ X1(i, 1))*100;
mtol(i,1) = tol;
Fim Passo 5
Passo 6: Se ERx < mtol
SADA (O vetor soluo : X1)
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 25/55
Mtodo de Gauss-Seidel

Ordem da matriz: ord

Matriz dos coeficientes: A

Vetor X inicial: X

Vetor dos termos independentes: B

Preciso: tol

Nmero mximo de iteraes: max


Aula 7 MATLAB - Zeros de funes
Clculo Numrico 26/55
Implementao
clear, clc

ord = input('Ordem da matriz:');

A = input('matriz dos coeficientes:');

X = input('Entre com o vetor X inicial:');

B = input('Entre com o vetor B:');

tol = input('Entre com a tolerncia:');

max = input('Entre com o nmero mximo de


Aula 7 MATLAB - Zeros de funes
iteraes');
Clculo Numrico 27/55
Implementao

k = 1;
for i = 1:ord
for j = 1:ord
if i == j

D(i,j) = 0;

I(i,1) = B(i,1)/A(i,i);
else
end D(i,j) =-A(i,j)/A(i,i);
end Aula 7 MATLAB - Zeros de funes
end Clculo Numrico 28/55
Implementao

While (k < max)


X1 = X;
for i = 1:ord

X1(i,1) = D(i,:)*X1 + I(i,1);


(Obs. A expresso D(i,:)*X1 realiza uma
multiplicao entre dois vetores
(uma linha da matriz e o vetor X))
end

Aula 7 MATLAB - Zeros de funes


Clculo Numrico 29/55
Implementao
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
Aula 7 MATLAB - Zeros de funes
Clculo Numrico 30/55

Você também pode gostar