Apresentação do PowerPoint

Propaganda
MÉTODOS NUMÉRICOS
APLICAÇÃO NO MATLAB
Professor: Lissandro Brito Viena
e-mail: [email protected]
[email protected]
Site: www.ifba.edu.br/professores/lissandro
EQUAÇÕES ALGÉBRICAS LINEARES E MATRIZES
1) NOTAÇÃO MATRICIAL
Uma matriz consiste de um arranjo retangular de elementos.
 a11
A

a n1
a1n 


a nn 
A matriz que tem “m” linhas e “n” colunas tem dimensão m x n.
A matriz que possui apenas linhas ou colunas, é denominada de
vetor linha ou vetor coluna respectivamente.
EQUAÇÕES ALGÉBRICAS LINEARES E MATRIZES
Exemplo de matriz linha denominada de vetor linha:
b  [b1
bn ]
Exemplo de matriz coluna denominada de vetor coluna:
 c1 
c 
 
c m 
Matriz quadrada é aquela que o número de linhas é igual ao número
de colunas. (m = n).
Matrizes quadradas são importantes no momento da resolução de
um conjunto equações algébricas lineares. Para tais sistemas, o
número de equações (linhas) e o número de variáveis (colunas)
Matrizes quadradas são importantes no momento da resolução de
um conjunto equações algébricas lineares. Para tais sistemas, o
número de equações (linhas) e o número de variáveis (colunas)
devem ser iguais para que exista apenas uma solução.
Matriz simétrica: é uma matriz do tipo quadrada em que os
elementos aij = aji.
Matriz diagonal: é uma matriz do tipo quadrada em que todos os
elementos fora da diagonal principal são nulos.
Matriz identidade: matriz diagonal em que os elementos da
diagonal principal são iguais a 1.
Matriz triangular superior: é aquela matriz em que os elementos
abaixo da diagonal principal são nulos.
Matriz triangular inferior: é aquela matriz em que os elementos
acima da diagonal principal são nulos.
Para saber a dimensão de uma matruz no MATLAB usa-se o
seguinte comando (size):
[m, n] = size(matriz)
Representando equações algébricas lineares na forma matricial
Considere o sistema 3 x 3 abaixo:
Representando equações algébricas lineares na forma matricial
Considere o sistema 3 x 3 abaixo:
a11x1  a12 x 2  a13 x 3  b1 


a
x

a
x

a
x

b
 21 1 22 2
23 2
2
a x  a x  a x  b 
3 
 31 1 32 2 33 3
O sistema acima pode ser representado pela seguinte notação:
 A  x    b
A matriz é denominada de matriz dos coeficientes, a matriz b
consiste de um vetor coluna de constantes e a matriz x consiste de
um vetor coluna de variáveis.
Representando equações algébricas lineares na forma matricial
Uma forma de resolver esse sistema é multiplicar ambos lados pela
inversa da matriz dos coeficientes:
 A  x    b
A
1
 A  x    A 
1
b
 x    A b
1
Para resolver equações algébricas lineares com MATLAB aplica-se
o seguinte comando:
x  A \ b
A segunda forma é usar matriz inversa:
x  inv(A)  b
NOÇÕES SOBRE ELMINAÇÃO DE GAUSS
Para explicar o procedimento de resolver equações algébricas
lineares pela eliminação de Gauss, o exemplo seguinte será usado:
3x1  0,1x 2  0, 2x 3  7,85
0,1x1  7x 2  0,3x 3  19,3
0,3x 1 0, 2x 2  10x 3  71, 4
O primeiro passo na solução do sistema é multiplicar a primeira
equação por 0,1/3 e subtraia da segunda, resultando em:
7,0033x 2  0, 293333x 3  19,5617
Ao multiplicar a primeira equação por 0,3/3 e subtrair da última
equação resulta no seguinte sistema:
NOÇÕES SOBRE ELMINAÇÃO DE GAUSS
3x1  0,1x 2  0, 2x 3  7,85
7,0033x 2  0, 293333x 3  19,5617
0,19x 2  10,0200x 3  70,6150
Para completar a operação, x2 deve ser removida da terceira
equação restando apenas x3 que pode ser encontrada
facilmente.
3x1  0,1x 2  0, 2x 3  7,85
7,0033x 2  0, 293333x 3  19,5617
10,0120x 3  70,0843
70,0843
x3 
 7,00003
10,0120
Após isso, é necessário retornar nas outras equações para
calcular as outras variáveis.
NOÇÕES SOBRE ELMINAÇÃO DE GAUSS
Após isso, é necessário retornar nas outras equações para
calcular as outras variáveis.
function [a_ampliada,x] = eliminagauss_lissandro(a,b)
% a- matriz dos coeficientes
% b - matriz dos termos independentes
% x- vetor das variáveis
[m,n]=size(a);
nb=n+1;
a_ampliada=[a b];
for k=1:(n-1)
for h=(k+1):(n)
a_ampliada(h,k:nb)=((a_ampliada(h,k))/(a_ampliada(k,k)))*a_ampliada(k,k:nb)- a_ampliada(h,k:nb);
end
end
x=zeros(n,1); % define inicialmente um vetor solução de zeros, para depois serem atualizados
% serve também para estabelecer que o vetor solução é do tipo coluna
x(n)=a_ampliada(n,nb)/a_ampliada(n,n);
for l=n-1:-1:1
for g =((l+1):n)
x(l)=(a_ampliada(l,nb))/(a_ampliada(l,l))-((a_ampliada(l,l+1:n))*x(l+1:n))/((a_ampliada(l,l)));
end
MÉTODOS ITERATIVOS
Os métodos iterativos ou métodos aproximados constituem um
caminho alternativo aos métodos de eliminação.
Sistemas lineares – Gauss Seidel
É o método iterativo mais comumente usado para resolver equações
algébricas lineares. Assuma que foi fornecido um conjunto de n
equações na forma:
 A  x    b
Para entender melhor esse método, limitaremos o sistema a 3 x 3:
MÉTODOS ITERATIVOS
a11x1  a12 x 2  a13 x 3  b1

a 21x1  a 22 x 2  a 23 x 3  b 2
a x  a x  a x  b
3
 31 1 32 2 33 3
Se os elementos da diagonal são todos não nulos, a primeira
equação pode ser resolvida para x1, a segunda equação para x2, e a
terceira para x3.
j1
j1
b

a
x

a
x
13 3
x1j  1 12 2
a11
j
j1
b

a
x

a
x
x 2j  2 21 1 23 3
a 22
j
j
b

a
x

a
x
x 3j  3 31 1 32 2
a 33
MÉTODOS ITERATIVOS
Em que j e j-1 são iteração atual e a anterior respectivamente.
Para começar o processo uma estimativa “chute” inicial deve dado
para o valor das variáveis. Uma aproximação simples é considerar
que todos valores são nulos.
Para a convergência é necessário que:
x ij  x ij1  
Exemplo prático: Use o método de Gauss Seidel para obter a
solução do seguinte sistema:
MÉTODOS ITERATIVOS
3x1  0.1x 2  0.2x 3  7,85

0,1x1  7x 2  0,3x 3  19,3
0,3x  0, 2x  10x  71, 4
1
2
3

A solução para o sistema é:[3 -2.5 7]
Solução: Inicialmente deve-se resolver cada equação para variável
da diagonal principal.
7,85  0.1x 2  0.2x 3
x1 
3
19,3  0,1x1  0,3x 3
x2 
7
71, 4  0,3x1  0, 2x 2
x3 
10
MÉTODOS ITERATIVOS
Assumindo x2 e x3 iguais a zero e substituindo na primeira equação
para calcular a variável x1 .
7,85  0.1x 2  0.2x 3 7,85  0,1 (0)  0, 2  (0)
x1 

3
3
O valor acima juntamente com o valor definido para x3, encontra-se
a variável x2.
19,3  0,1x1  0,3x 3 19,3  0,1 (2,616667)  0,3  (0)
x2 

7
7
x 2  2,794524
A primeira iteração é finalizada substituindo os valores x1 e x2 para
o cálculo de x3.
O slide seguinte mostra o cálculo.
MÉTODOS ITERATIVOS
O valor da variável x3 pode ser calculado da seguinte forma:
71, 4  0,3x1  0, 2x 2
x3 
10
71, 4  0,3   2,616667   0, 2   2,794524 
x3 
10
x 3  7,005610
Para a segunda iteração, tem-se que:
7,85  0.1x 2  0.2x 3
x1 
3
7,85  0,1 (2,794524)  0, 2  (7,005610)
x1 
3
x1  2,990557
MÉTODOS ITERATIVOS
Para a segunda iteração, tem-se que:
7,85  0.1x 2  0.2x 3
x1 
3
7,85  0,1 (2,794524)  0, 2  (7,005610)
x1 
3
x1  2,990557
O valor da variável x2 na segunda iteração:
19,3  0,1x1  0,3x 3
x2 
7
19,3  0,1 (2,990557)  0,3  (7,005610)
x2 
7
x 2  2, 499625
MÉTODOS ITERATIVOS
O valor da variável x3 na segunda iteração:
71, 4  0,3x1  0, 2x 2
x3 
10
71, 4  0,3   2,990557   0, 2   2, 499625 
x3 
10
x 3  7,000291
OBS: A CADA NOVO VALOR DE “x” CALCULADO PELO
MÉTODO DE GAUSS-SEIDEL É IMEDIATAMENTE
USADO NA PRÓXIMA EQUAÇÃO PARA ENCONTRAR O
OUTRO VALOR DE “x”.
MÉTODOS ITERATIVOS
function x = gseidel(a,b,es,maxit)
% x=gseidel(a,b)
% a- matriz dos coefientes
% b- matriz dos termos independentes
% es - critério de parada
% maxit - máxima quantidade de iterações
% x - vetor com a solução do sistema de equações
% error - função matlab que mostra
%uma mensagem de erro e cancela a função
% nargin - número de argumentos de
%entrada de uma determinada função.
MÉTODOS ITERATIVOS
%BIBLIOTECA DE FUNÇÕES DO MATLAB COM AS RESPECTIVAS
APLICAÇÕES
% error - função matlab que mostra uma mensagem de erro e cancela a função
% nargin - número de argumentos de entrada de uma determinada função. O
% nargin retorna o número de argumentos de entrada que foi usado para
% chamar a função.
% nargout - retorna o número de argumentos de saída da função.
% isempty - isemty(y) retorna 1 se y é um array sem elemento e 0 caso
% contrário
if nargin<2
error('pelo menos dois argumentos de entrada são necessários')
end
if nargin <4 || isempty(maxit)
maxit=50;
end
if nargin<3 ||isempty(es)
es = 0.00001;
end
MÉTODOS ITERATIVOS
[m,n]=size(a);
if m~=n
error('a matriz deve ser quadrada')
end
c=a;
% x=xp;
for i =1:n
c(i,i)=0;
x(i)=0;
end
x=x';
for i=1:n
d(i)=b(i)/a(i,i);
end
for i=1:n
c(i,1:n)=c(i,1:n)/a(i,i);
end
iter = 0;
ea=1;
% format long
while ea>=es
xvelho=x;
for i=1:n
x(i)=d(i)-c(i,:)*x;
if x(i)~=0
ea(i)=abs(x(i)-xvelho(i));
end
iter=iter+1;
end
x
end
MÉTODOS ITERATIVOS
MÉTODO DE NEWTON-RAPHSON
A expansão em série de Taylor de primeira ordem é dada por:
f  x i1   f  x i   (x i1  x i )f ' (x i )
Estimativa
inicial
x i1  x i 
Equivale ao ponto em que ocorre a intersecção com eixo x. Nesse
ponto f(xi+1) = 0.
f  xi 
f ' (x i )
A equação acima corresponde ao método de Newton Raphson para
apenas uma equação.
MÉTODO DE NEWTON-RAPHSON
f1
f1 (x1 , x 2 )  f1 (x1k , x 2k ) 
(x1  x1k )
x1 (x ,x )
1k
f1

x 2
(x 2  x 2k )  0
(x1k ,x 2 k )
f 2 (x1 , x 2 )  f 2 (x1k , x 2k ) 
f 2

x 2
2k
f 2
x1
(x 2  x 2k )  0
(x1k ,x 2 k )
(x1  x1k )
(x1k ,x 2 k )
MÉTODO DE NEWTON-RAPHSON
Na forma vetorial as equações ficam da seguinte maneira:
 f1
 f1 (x1 , x 2 )   f1 (x1k , x 2k )   x1
f (x , x )   f (x , x )    f
 2 1 2   2 1k 2k   2
 x
 1
f1 
x 2 

f 2 
x 2  ( x
 (x1  x1k ) 



(x 2  x 2k ) 
1k ,x 2 k )
0 
0 
 
Podemos resolver a equação acima para (x1, x2).
 f1
 x1,k 1   x1k   x1
x
  x   
 2,k 1   2k   f 2
 x
 1
f1 
x 2 

f 2 
x 2 
1
 f1 (x1k , x 2k ) 


f
(x
,
x
)
 2 1k 2k 
(x1k ,x 2 k )
MÉTODO DE NEWTON-RAPHSON
A seguir a notação resumida:
 x k1   x k   J K f  x k 
1
Em que  J  é a matriz jacobiana das funções do sistema de equações
algébricas.
Podemos também fazer as seguintes considerações sobre o método
de Newton.
Considere a solução de uma equação de uma única variável dada
por:
f (x)  c
MÉTODO DE NEWTON-RAPHSON
o
Se xo é a estimativa inicial da solução e x é um pequeno desvio
da solução correta, então:
f (x o  x o )  c
Expandindo o lado esquerdo da equação por série de Taylor, tem-se
que:
2

df
1
d
f
  (0)
(0)
(0) 2
f (x )    x   2   x 
2!  dx 
 dx 
c
Assumindo um erro muito pequeno x (0) resulta que:
 df 
(0)
c   
 dx 
Em que:
(0)
x (0)
c(0)  c  f  x (0) 
MÉTODO DE NEWTON-RAPHSON
O algoritmo de Newton Raphson é então colocado abaixo:
c(k )  c  f  x (k ) 
x (k ) 
c(k )
 df 
 
 dx 
(k )
x (k 1)  x (k )  x (k )
Para ilustrar a aplicação do método de Newton-Raphson, o seguinte
exemplo será utilizado:
f  x   x 3  6x 2  9x  4
MÉTODO DE NEWTON-RAPHSON
Inicialmente calcula-se a derivada da função:
f  x   x 3  6x 2  9x  4
df
 3x 2  12x  9
dx
c(0)  c  f  x (k ) 
c(0)  0  63  6(6) 2  9(6)  4   50
0
2
 df 

3
6
   12  6   9  45
 
 dx 
x
(0)
c(0)
50


 1,1111
0
45
 df 
 
 dx 
MÉTODO DE NEWTON-RAPHSON
O resultado no final da primeira iteração é:
x (1)  x (0)  x (0)
x (1)  6  1,1111  4,8889
As iterações subsequentes resultam em:
13, 4431
(2)
(1)
(1)
x  x  x  4,8889 
 4, 2789
22,037
2,9981
x (3)  x (2)  x (2)  4, 2789 
 4,0405
12,5797
0,3748
x (4)  x (3)  x (3)  4,0405 
 4,0011
9, 4914
0,0095
(5)
(4)
(4)
x  x  x  4,0011 
 4,000
9,0126
MÉTODO DE NEWTON-RAPHSON
Agora considere o problema que envolve uma quantidade maior de
variáveis:
f1 (x1 , x 2 , x n )  c1 
f (x , x , x )  c 
n
2 
 2 1 2




f
(x
,
x
,
x
)

c
n
n 
 n 1 2
MÉTODO DE NEWTON-RAPHSON
Aplicando série de Taylor e desprezando os termos de ordem
elevada resulta em:
(0)
1
 f1  (0)  f1  (0)

 x 1  
 x 2
 x1 
 x 2 
 f1

 x n
 (0)
 x n  c1

(0)
n
 f n  (0)  f n  (0)

 x 1  
 x 2
 x1 
 x 2 
 f n

 x n
 (0)
 x n  c n

f
f
Colocando na forma matricial:
MÉTODO DE NEWTON-RAPHSON
Colocando na forma matricial:
 f (0)  f (0)
1
 1 


x
 x 2 
 c1  f 10 (x)   1 

 


c  f 0 (x)  
(0)
(0)
 n n
 
 f n 
 f n 


 x 

x
 2
 1 
 f1  

   (0) 
 x n   x 1






 (0) 
(0) 
 f n    x n 

 

x
 n 
(0)
Numa forma mais compacta, a notação seguinte torna-se mais
apropriada.
 C
(k )
 J
(k )
 x 
(k )
MÉTODO DE NEWTON-RAPHSON
Colocando na forma matricial:
 C
(k )
 J
(k )
 x 
 J
(k )
 x 
1(k )
(k )
 C
(k )
A atualização das variáveis é feita da seguinte maneira:
x
k 1
  x    x 
k
(k )
MÉTODO DE NEWTON-RAPHSON
Em que:
 x 
(k )
 C
(k )
 x1(k ) 
 (k ) 
x 2 




 (k ) 
 x n 
 f (k )
 1 
 x1 

 J (k )   


(k )
(k )
 f n 
 c1   f1  
 x 


(k )
 1 
 c2   f 2  




c   f (k ) 
n

 n
 J (k )  - MATRIZ JACOBIANA
 f1 



x
 2
(k )
 f n 



x
 2
(k )
 f1  

 
 x n  



(k ) 
 f n  

 

x
 n 
(k )
MÉTODO DE NEWTON-RAPHSON
Exemplo de aplicação do método de Newton-Raphson
1) Encontre a solução do seguinte sistema de equações
x12  x 22  4
e x1  x 2  1
Passo 1: Construção da matriz jacobiana
 2x1
j   x1
e
2x 2 
1 
Passo 2: Preparar o algoritmo
MÉTODO DE NEWTON-RAPHSON
Exemplo de aplicação do método de Newton-Raphson
deltax=1; % incremento da variável é ajustado em um valor alto
x=input('Entre com a estimativa inicial -> ');
iter = 0;
disp(' iter deltac
j deltax
x')
while abs(deltax)>0.0001 & iter<100
iter=iter+1;
deltac=0-(x^3-6*x^2+9*x-4);
j=3*x^2-12*x+9;
deltax=deltac/j;
x=x+deltax;
% fprintf('%g', iter)
disp([iter , deltac,
j,
deltax,
x])
end
MÉTODO DE NEWTON-RAPHSON
Exemplo de aplicação do método de Newton-Raphson
iter = 0;
x=input('Entre com a estimativa inicial da solução - vetor coluna x=[x1;x2] - >
');
deltax=[1;1];
c=[4;1];
disp('iter deltac jacobiana
deltax x')
while max(abs(deltax))>=0.0001 & iter<10
iter=iter+1;
f=[x(1)^2+x(2)^2; exp(x(1))+x(2)];
deltac=c-f;
j=[2*x(1) 2*x(2);exp(x(1)) 1];
deltax=j\deltac;
x=x+deltax;
fprintf('%g', iter)
disp([ deltac, j, deltax, x]
MÉTODO DE NEWTON-RAPHSON
Exemplo de aplicação do método de Newton-Raphson
Atividade: Partindo com valores iniciais x1, x2, x3 resolva o
seguinte sistema de equações pelo método de Newton Raphson:
x12  x 22  x 32  11
x1x 2  x 22  3x 3  3
x1  x1 x 3  x 2 x 3  6
Download