Você está na página 1de 48

Curso MATLAB 6

Instrutor: Marcelo Escobar Mtodos Nmericos para Engenheiros

Mtodos Numricos
lgebra Matricial Sistemas Lineares Sistemas no lineares Equaes Integrais Equaes Diferenciais Otimizao Manipulao Simblica

lgebra Matricial:
Tpicos de Ajuda: >>help matfun >>help elmat >>help sparfun Multiplicao Matricial: [Produto Interno] Dadas as Matrizes A e B: A * [n x m ] >> A*B Diviso Matricial: [Produto Externo] B= C/A >>C\A B = [ m x p] C [n x p]

Conceitos Importantes:
Conceitos Importantes: Matriz Transposta: B=AT se b(j,i)=A(i,j) Matriz Identidade: I(i,j)=1 se i==j e I(i,j)=0 se i~=j Matriz Inversa: se B*A=I, B a inversa da matriz A Matriz Singular: se det(A)=0, A singular Matriz Simtrica: se A= AT Diagonal Principal da Matriz : A(i,i) para i=1:n Matriz Triangular Superior: A(i,j)=0 se i>j Matriz Triangular Inferior: A(i,j)=0 se i<j Ortogonalidade de Vetores: se a*b=0 a[ 1 x n] e b[ 1 x n] a e b so ditos ortogonais.

Sistemas Lineares:
Sistemas Lineares: Forma Geral [ Ax=b ] Classificao: Possvel e Determinado : se det(A)~=0 Possvel e Indeterminado: se det(A)=0 e todos det(A(:,i)=b)=0 i=1:n Impossvel: se det(A)=0 e pelo menos um det(A(:,i)=b)~=0 i=1:n Posto de uma Matriz: Nmero de Equaes Independentes >> rank(A) Valores Caractersticos: A- I=A para >>eig(A) Vetores Caractersticos: A* ( *I) = ( *I) *V >>[lambda V]=eig(A) ~=0

Mtodos Diretos:
Mtodos de Resoluo de Sistemas Lineares: Forma mais simples no Matlab: x=A\b Mnimos Quadrados: x=lsqlin(A,b) Mtodos Diretos: ( Principais) Eliminao Gaussiana: Fatorizao:
a kj a kj n k ! 1,..., N a kk j ! k ,..., N  1 a i ! 1,..., N ( { k ) ij n a ij  aik a kj

>>help lu [ Decomposio LU] [ Decomposio Ortogonal Triangular] >>help qr >>help svd [ Decomposio em Valores Singulares] >>help schur [ Decomposio Schur] Ex: A = L U Ly=b Ux

Exemplo Mtodo de Gauss:


1 2 3 x1 3 4 5 6. x ! 6 2 7 8 0 x3 9 A.x ! y

Exemplo: Linha1=linha1/A(1,1) Linha2=linha2-A(2,1)*linha1 Linha3=linha3-A(3,1)*linha1 Linha2=linha2/A(2,2) Linha1=linha1-A(1,2)*linha1 Linha3=linha3-A(3,2)*linha3 Linha3=linha3/A(3,3) Linha1=linha1-A(1,3)*linha1 Linha2=linha2-A(2,3)*linha2
1 0 0

2 3 6

3 3 6 6 21 12

1 0  1  1 0 1 2 2 0 0  9 0

1 0 0  1 0 1 0 2 0 0 1 0

x1=-1 x2=2 x3=0

Exemplo Mtodo de Crammer:


1 2 3 x1 3 4 5 6. x ! 6 2 7 8 0 x3 9 A.x ! y

Ax

3 2 3 6 5 6 9 8 0

X1=det(Ax)/det(A)

Linha1=b Ax Linha2=b Ay Linha3=b Az

1 3 3 Ay ! 4 6 6 7 9 0

X2=det(Ay)/det(A)

Az

1 2 3 4 5 6 7 8 9

X3=det(Az)/det(A)

x1=-1 x2=2 x3=0

Mtodos Indiretos:
Mtodos Indiretos: ( Principais) Iteraes de Jacobi

x k 1 ! M x k  c , k ! 0,1,2, ...
onde M = D-1 B, c = D-1 b, B = D - A. Sendo D a diagonal da matriz A. O mtodo escrito para cada elemento do vetor x apresenta a seguinte forma:
N

bi  x ik 1 !

a ij x kj
j !1 ( { i )

a ii

, i ! 1, ... , N

e k ! 0,1,2, ...

Mtodos Indiretos:
Iteraes de Gauss-Seidel :
Este mtodo uma modificao do mtodo de Jacobi, cujo princpio de usar os novos valores de x to logo eles estejam disponveis. Neste caso a matriz M = (D - L)-1 U e o vetor c = (D - L)-1 b, onde D, L e U so as matrizes diagonal, triangular inferior e triangular superior, respectivamente, extradas da matriz A = D - L - U. O mtodo escrito para cada elemento do vetor x apresenta a seguinte forma:
bi  a ij x k 1  j x ik 1 !
j !1 i 1

j ! i 1

a ij x kj
, i ! 1,... , e k ! 0,1,2 ,...

a ii

Sistemas Esparsos:
Sistemas Esparsos: vrios elementos nulos >>help issparse [ teste de esparsidade] >>help sparse [ converso de matriz cheia para matriz esparsa] >>help full [ converso de matriz esparsa para matriz cheia] Gerao de Matrizes Esparsas: >>help sprand [gerao de matriz esparsa aleatria]

>>help sparndsym [gerao de matriz esparsa simtrica aleatria] Mtodos para Sistemas Esparsos: >> help pcg Conjugate Gradiente >> help cgs Conjugate Gradient Squared (CGS) >> help bicg BiConjugate Gradient (BiCG) >>help bicgstab BiConjugate Gradient Stabilized (BiCGSTAB) >>help gmres Generalized Minimum Residual (GMRES) >>help qmr Quasi-Minimal Residual without lookahead (QMR)

Dicas Sistemas Lineares:


Sistemas Sub-Determinados: Numero de Equaes (ne) menor que o numero de incgnitas(ni) >>A\b assume (ni-ne) variveis nulas Sistemas Sobre-Determinados: Numero de Equaes (ne) Maior que o numero de incgnitas(ni) >>A\b utiliza mnimos quadrados para minimizar os resduos Residuo=(A*x-b) Conceito de Norma: >>help norm A norma utilizada como critrio de parada em loops multivariaveis.
M
1

! max mij j i !1

! max mij i j !1

M
F

m
i !1 j !1

2 ij

Equaes Transcendentais:
Equaes sem soluo analtica: Ex: f(x)= x*exp(x/2) qual x / f(x)=0? Resoluo no matlab: >>help optim >>help fzero >>help fsolve Para utilizar as funes deve-se criar uma funo com a equao: function f=funcao_teste(x) f=x*exp(x/2)
chute inicial

>>fsolve(funcao_teste, 0)

ou

>> fzero(funcao_teste, 0)

Sistemas No Lineares:
Para resolver sistemas de equaes: function f=funcao_teste2(x) x1=x(1);x2=x(2); f1=x1*x2-6; f2=x2+x1-5; F=[f1;f2];
chute inicial

>>fsolve(funcao_teste2, [ 3; 4])

Mtodos para Sistemas No Lineares


Mtodo de Substituio Sucessiva:
x ! g( x)

O processo iterativo aplicado equao algbrica na forma modificada da equao , que pode ser obtida por um rearranjo interno desta equao ou pela simples adio de x em ambos os lados da igualdade.

x k 1 ! g ( x k )

k ! 0,1,2,-

g(x)

45

x*

x1

x0

Mtodos para Sistemas No Lineares:


Mtodo da Bisseo:

x k 1

k k xR  xL ! 2

k ! 0,1,2,f(x)

k xR

x k ! k x R 1

k se sign f ( x k ) ! sign f ( x R 1 )


x0 L x * x1 R x

x k xL ! k x L 1
k

Os pontos iniciais devem satisfazer a condio:


0 sign f ( x 0 ) !  sign f ( x R ) L

onde a funo sign(f(x)) fornece o sinal da funo f(x).

caso contr rio

se sign f ( x ) ! sign f caso contr rio

k ( x L 1 )

x0 R

Mtodos para Sistemas No Lineares:


Mtodo de Newton Raphson: O processo iterativo aplicado diretamente sobre a equao algbrica na forma:

k 1

!x 
k

f (x k ) (x fd )
k

k ! 1,2,3,-

f(x)

x*

x1

x0

Newton para Sistemas no Lineares:


Para sistemas no lineares:

f1 ( x1 , x2 , x3 ,..., xn ) ! 0 f 2 ( x1 , x2 , x3 ,..., xn ) ! 0 f 3 ( x1 , x2 , x3 ,..., xn ) ! 0 ... f n ( x1 , x2 , x3 ,..., xn ) ! 0


x ! ?x1 x2 x3 xn A

x K 1
Onde:
df1 dx1 df 2 Ja ! dx 1 ... ...

f ( xk ) ! xK  Ja ( x k )

df1 dx2 df 2 dx2 ... ...

df1 dx3 df 2 dx3 ... ...

df1 dxn df 2 dxn ... df n dxn

f1 f f ( x) ! 2 f3 fn

Mtodos para Sistemas No Lineares


Mtodo de Newton Secante: O mtodo de Newton-secante baseia-se na aproximao da derivada da funo f(x), que aparece no mtodo clssico de Newton, pela equao de diferenas esquerda:
df fd )! (x dx
k

xk

f ( x k )  f ( x k 1 ) (f } ! (x x k  x k 1

k 1

! x  f (x )
k k

x k  x k 1 f (x )  f (x
k k 1

k ! 1,2,3,-

Dicas-Sistemas no lineares:
Uma vez definida a funo e criado o arquivo contendo a mesma, Podemos executar a subrotina criada, lembrando que a soluo numrica sujeita a uma tolerncia: Se f(x)>tol, x soluo da equao Para sistemas multivariaveis iterativos devemos usar a norma: norma(xk+1 xk)>tol Ao usar os mtodos do matlab podemos criar um vetor de opes: op=optimset(metodo) Op=(Propriedade1, valor, Propriedade2,valor)

Equaes Integrais :
x max

f ( x).dx
x min

>>help quad [ Mtodo da quadratura de Simpson] >>help quadl [Mtodo da quadratura de Lobato] >>help quad8 [Mtodo de Alta ordem] >>help trapz [ Mtodo Trapezoidal] >>help bdlquad [Mtodo para Integrais Duplas]

y max

y min

x max

x min

f ( x, y ).dx.dy

Mtodos Integrais :
Regra dos Trapzios:

Regra de Simpson:

Ex: integral do sin(x)/(x+1) de 0 a 3.14 function f=funcao_01(x) f=sin(x)./(x+1); >> quad(funcao_01,0,3.14)

Equaes Diferenciais:
Aproximao com x pequeno: >>help diff
Utilizando os mtodos integrais:

dy f ( x  (x )  f ( x ) ! lim (xp0 dx (x

>>help ode 23 [baixa ordem] >>help ode23s [baixa ordem rgido] >>help ode15s [ordem moderada rgido] >>help ode 45 [ alta ordem] >>help ode45s [alta ordem rgido] >>help odeset [ set de propriedades dos mtodos]

Exemplo Equaes Diferenciais:


Simples:
dy ! 0.1( y  10) dt yo ! 100

yxt

Function dy= df(t,y) dy=-0.1*(y-10) >>[t,y]=ode23(df, [0 60] , 100) Ou >>ode23(df, [0 60] , 100) Mostra a evoluo da Integrao

Exemplo Equaes Diferenciais:


Sistema:

dx !u dt du ! (1  u 2 )u  x dt

xo ! 2 u0 ! 0

function dydt = vdp1(t,y) dydt = [y(2); (1-y(1)^2)*y(2)-y(1)]; >>ode23(vdp1,[0 20],[2 0]); Ou >>[t,y]= ode23(vdp1,[0 20],[2 0]); >>x=y(:,1); >>u=y(:,2);

Equaes Diferenciais:
Problemas de Valor inicial no Matlab:

[t,y]=odexx(func,tspan,yo) Yo-valor inicial Tspan- valor inicial e final de tempo Func-funo a ser integrada

Mtodo de Euler Implicito:


df ( x) ! g ( x, t ) dt

Condicoes Iniciais: f(x) t=0 f(0)=fo

f(x2) f(x1) f(xo) xo x1 x2

df ( x0 , t 0 ) (f ( x) f ( x1 , t1 )  f ( x0 , t 0 ) $ ! dt (t x1  x0

Passo de Integracao:

h ! x1  x0

f ( x1 , t1 ) ! f ( x0 , t 0 )  h.g ( x0 , t0 )

Mtodo de Euler Implcito :


Para sistemas :

df f1 ( x1 , x2 , x3 ,..., xn ) ! dx1 df f 2 ( x1 , x2 , x3 ,..., xn ) ! dx2 df f 3 ( x1 , x2 , x3 ,..., xn ) ! dx3 ... df f n ( x1 , x2 , x3 ,..., xn ) ! dxn


x ! ?x1 x2 x3 xn A

Sistema de Equaes Algbricas que devem ser resolvidas simultaneamente:

f1 ( x1 , t ) ! f1 ( x0 , t 0 )  h. f1 ( x0 , t0 ) f 2 ( x1 , t ) ! f 2 ( x0 , t0 )  h. f 2 ( x0 , t 0 ) f 3 ( x1 , t ) ! f 3 ( x0 , t0 )  h. f 3 ( x0 , t 0 ) f n ( x1 , t ) ! f n ( x0 , t0 )  h. f n ( x0 , t0 )

Mtodo de Runge Kutta Implicito :

Mtodos Explcitos:
So os mtodos implicitos s que a funo g usa o valor de t e y no novo ponto. Exemplo: Euler explicito
f ( x1 , t1 ) ! f ( x0 , t0 )  h.g ( x1 , t1 )

Os mtodos explcitos so mais estavis, no entanto se a a funo g no linear o calculo requer a soluo de um sistema no linear a cada iterao. Para facilitar podemos usar o mtodo preditor corretor: 1-usamos o mtodo explicito para calcular o novo ponto 2-usamos o mtodo implcito para corrigir.

Dicas Equaes Diferenciais:


Estabilidade: Os mtodos explcitos requerem passos pequenos para manter a estabilidade, o menor passo que pode ser dado pode ser calculado pela expresso:

Onde p depende do mtodo ( p=2 para Euler) e lambda o valor caracteristico do sistema. Os valores caractersticos , so os valores que multiplicam a varivel t.

Dicas Equaes Diferenciais:


O passo limitado pela dinmica mais rpida do sistema, uma forma de medir essa limitao dada pelo conceito de rigidez: Rigidez

Problemas de Contorno:
Os mtodos vistos para problemas de valor inicial, podem ser aplicados a problemas de contorno substituindo por exemplo t por x.O nico problema que para equaes de ordem superior esses mtodos requerem como entrada a derivada no primeiro ponto de x o que em alguns casos no conhecido. Para contornar esse tipo de problema podemos chutar valores para a derivada e verificar se a soluo satisfaz o outro ponto.[Shooting Method] Ex:
d2y  6y ! 0 x 2 dx
2

C.C. Y=1 para x=1 e x=2

d y !z dx
d z 6y ! 2 dx x

function F=teste(x,y) F(1)=y(2); F(2)=6*y(1)/x^2;

>>chute=-1.5 >> [x,y]=ode45(teste,[1 2],[1 chute]) Interpolando: para x=2 y=1.1 Soluo Precisa: chute=-1.516

Equaes Diferenciais Parciais:


>>help pde [ toolbox de Equaes Dif. Parciais] >>pdetool [Ferramenta para Simulao] Usando o pdetool: 1)Devemos desenhar os contornos do problema 2)Em PDE, devemos editar a equao a ser resolvida 3)Solve para resolver o problema. Uma forma alternativa usar Diferenas Finitas e transformar o nosso problema em um sistema de equaes algbricas.Esse procedimento pode ser usado tambm para problemas de contorno.

Otimizao:
>>help optim [ toolbox de otimizao] >>help optimset [ set de propriedades dos mtodos] Otimizao sem restrio: Problema a ser resolvido: 1)podemos aplicar o conceito de derivada nula, gerando um sistema de equaes que podem ser resolvidos como visto anteriormente usando fzero e fsolve. 2)Usando as funes: >>help fmin [monovariavel] >>help fminbnd [monovariavel com limites] >>help fminsearch [multivariavel]

Otimizao sem Restrio:


Exemplo:min
S ( x ) ! 100. 2  x12   x1 x 1
2 2

function S=test(x) S=100*(x(2)-x(1).^2).^2+(1-x(1)).^2; >>x0 = [-1.2, 1] >>[X ,S]= FMINSEARCH(test,X0) xo = [1, 1] [ timo encontrado] S=0 [valor da funo objetivo] Podemos criar um vetor de Opes: Op=(optimset,Propriedade1,valor,....)

Otimizao:
Otimizao com restrio: Problema a ser resolvido:

>>help fmincon [ Restries lineares e no lineares] >>help constr [ Restries lineares] >>help linprog [ Programao Linear] >>help quadprog [Programao Quadrtica] >>help lsqlin [Mnimos Quadrados]

Otimizao:
Programao Linear: S,g e h devem ser linear. Max s.a:
S ! 3 x1  2 x 2  4 x 3

Devemos Escrever na Forma: min f'*x s.a.: A.x <= b Aeq.x=Beq

2 x1  8 x2  9 x3 ! 5
1.6 x1  4.7 x2  8 x3 e 4

x1  5 x3 u 8
x2 e 0
1.6 4.7 8 A!  1 0  5

f ! ? 3 2  4A
'

4 b!  8

 Inf lb !  Inf  Inf

 Inf ub ! 0  Inf

Aeq ! ?2  8 9A

beq ! ? A 5

Lb-limite inferior >>[x, S]=linprog(f,A,b,Aeq,Beq,lb,ub) x=[-121.8936 ; -1.8723; 25.9787 ]

Ub-Limite superior S=258.0213

Otimizao:
Programao No Linear:
[Programao Linear Sucessiva-SLP] Quando um problema de otimizao no linear, seja na funo objetivo ou nas restries, uma possibilidade para encontrar o timo atravs da linearizao em torno do ponto timo. Alm disso podemos utilizar mtodos que transformam um problema com restrio em um problema sem restrio. Exemplo: [Multiplicadores de Lagrange] [Funo Penalidade] Para maiores detalhes sobre os mtodos, vide na referncia o material sobre otimizao.

Otimizao:
Programao Quadrtica: Se funo objetivo quadrtica e as restries so lineares, podemos utilizar quadprog do Matlab. Exemplo: min s.a.
2 2 2 2 S ! x12  2 x2  3 x3  4 x4  5 x5

2 x1  x2  4 x3  x4  x5 ! 0

5 x1  2 x3  x4  x5 ! 0

x1  2 x2  x3 u 6
4 x3  x4  2 x5 e 0

2 0 H ! 0 0 0

0 0 4 0 0 6 0 0 0 0

0 0 0 0 0 0 8 0 0 10

A funo objetivo deve ser escrita na forma: S=0.5*x'*H*x + f'*x


f ! ?0 0 0 0 0A
2 1  4 1  1 Aeq ! 5 0  2 1  1  1  2  1 0 0 A! 0 4 1  2 0 0 beq ! 0

[x,S]=quadprog(H,f,A,b,Aeq,beq) x=[0.4812 2.4962 0.5263 -0.6023 0.7514] S=17.7989

 6 b! 0

Otimizao:
Programao No Linear: Exemplo: min s. a.
2 exp( x1 ). 4 x12  2 x2  4 x1 x2  2 x2  1

1.5  x1 x2  x1  x2 e 0

Podemos usar fmincon do Matlab, devemos criar um arquivo com a funo objetivo e se as restries so no lineares, precisamos criar outro arquivo com as restries.
Function S=fob(x) S=exp(x(1))*( 4*x(1)^2 +2*x(2)^2 +4*x(1)*x(2)+2*x(2)+1); Function [G,H]=rest(x) G(1)=1.5+x(1)*x(2)-x(1)-x(2); G(2)=-x(1)*x(2)-10; H(1)=0;

x1 x2 u 10

>>[x S]=fmincon('fob',[-1;2],[],[],[],[],[],[],'rest') x=[ -9.5474 1.0474] S=0.0236

Otimizao:
Programao Inteira Mista:
Muitos problemas em operao, projeto, localizao e escalonamento de plantas envolvem variveis que no so contnuas e sim discretas, ou seja, variveis que so inteiras. Exemplo:

Um dos algoritmos numricos mais empregados para PIM e denominada Branch and Bound Technique. O Matlab no possui uma rotina pronta para esse tipo de problema. As rotinas podem ser encontradas no diretrio rotinas prontas/otimizao/MILP e MINLP

Rotinas Prontas:

No diretrio do CD-ROM Rotinas\MetodosNumericos Temos uma srie de rotinas prontas separadas por tpicos. As rotinas seguem um padro bem similar s funes embutidas do Matlab e um help nome da funo explica o seu funcionamento.

Variveis Simblicas:
>>help symbolic [ toolbox ] Criando variaveis simbolicas: >>help sym >> help syms ex: >>syms x y [ cria x e y como var. simblicas] Manipulando variveis simblicas: Uma vez criada as variveis simblicas podemos usar todas as operaes matemticas do matlab. >>f=x+2*y >>g=x*y >>f+g; >>f*g; >>f/g; Alm de algumas operaes especificas para var. simblicas: >>finverse(f); [inversa da funo f] >>compose(f,g); [ funo composta f(g(x))] >>ezplot(f,2,3); [ plotagem de f entre os limites 2-3]

Variveis Simblicas:
O produto das operaes pode resultar em expresses matemticas complicadas: >>simple; [ coloca a expresso na forma mais simples] >>simplify; [ simplifica a expresso] >> pretty; [ exibe a expresso de uma forma mais visual] Aps a manipulao e simplificao pode-se desejar substituir valores para as variveis simblicas: >>subs( f,2) [ substitui em f x=2] >>subs(f, x,2) [ substitui em f x=2 se f funo multivariavel] >>subs(f,x,y) [ substitui em f x=y] ex: >> f=x+y >>subs(subs(f,x,2),y,3) [ ans=5] [x=2 e y=3]

Resoluo Simblica:
Equaes Algbricas: >>help solve >>[x1,x2,..xn]=solve( eq1,eq2,...eqn) As equaes podem ser escritas na forma: x*y=2 ou x*y-2 Exemplo: >> syms x >>f=x+4; >>g=x+4; >>solve(f) [ ans=-4] >>solve(g) [ ans=-4] A vantagem que o solve retorna todas as solues do sistema, no entanto, o solve no muito robusto. No resolvendo sistemas muito complexos.

Resoluo Simblica:
Derivadas Simblicas: >> help diff >>syms x y >>f= 2*x + x*y + 2*y; >>diff(f, x) [ derivada parcial em relao a x] >>help jacobian: >>jacobian( [f; g], [ x ; y]) Integrais Indefinidas: >>help int >>int(g) [ g(x), integra g em relao a x com constante de int=0] >>int(g,x) [ g(x), integra g em relao a x com constante de int=0] >>int(g,a,b,c) [integral definida entre a e b] Se a constante de integrao diferente de zero, devemos somar essa constante soluo obtida

Resoluo Simblica:
Equaes Diferenciais: >>help dsolve >>dsolve(Dy=4*y) >>dsolve(Dy=4*y, y(0)=1) >>dsolve( eqdif 1, eqdif 2, ...., cond inicial 1,....) Exemplo: >>S = dsolve('Dx = y', 'Dy = -x', 'x(0)=0', 'y(0)=1') As vezes, o matlab retorna a resposta em uma estrutura: S.x= sin(t) S.y=cos(t)

Você também pode gostar