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 ]

B =
[ m x p]

C
[n x p]

>> A*B
Diviso Matricial: [Produto Externo] B= C/A
>>C\A

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 ~=0
>>eig(A)
Vetores Caractersticos: A* (*I) = (*I) *V
>>[lambda V]=eig(A)

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

k 1,..., N
a kk

j k ,..., N 1
i 1,..., N ( k ) aij aij aik a kj

>>help lu
[ Decomposio LU]
>>help qr
[ Decomposio Ortogonal Triangular]
>>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
4 5 6 . x

2
7 8 0 x3
A.x y

3
6

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 2
0 3

3 3
6 6
0 6 21 12

1 0 1
0 1 2

0 0 9

1
2

0

1 0 0
0 1 0

0 0 1

1
2

0

x1=-1 x2=2 x3=0

Exemplo Mtodo de Crammer:


1 2 3 x1
4 5 6 . x

2
7 8 0 x3

3
6
9

A.x y

Linha1=b Ax
Linha2=bAy
Linha3=bAz

3 2 3
Ax 6 5 6
9 8 0
1 3 3
Ay 4 6 6
7 9 0

1 2 3
Az 4 5 6
7 8 9

X1=det(Ax)/det(A)

X2=det(Ay)/det(A)

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:

bi
x ik 1

a ij x kj

j 1 ( i )

a ii

, i 1, ..., N

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:
i 1

x ik 1

bi

j 1

a ij x kj 1
a ii

a ij x kj

j i 1

, i 1,..., N

k 0,1,2, ...

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:

max mij
j i 1

max mij
i j 1

m
i 1 j 1

2
ij

>>help norm
A norma utilizada como critrio de parada em loops multivariaveis.

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

x Rk

x k 1

x Rk x Lk

se sign f ( x k ) sign f ( x Rk 1 )

x Rk 1

k 0,1,2,
f(x)

caso contr rio


x 0L

x Lk

se sign f ( x ) sign f

x Lk 1

( x Lk 1 )

caso contr rio

Os pontos iniciais devem satisfazer a condio:

sign f ( x 0L ) sign f ( x R0 )

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

x * x 1R

x 0R

Mtodos para Sistemas No Lineares:


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

x k 1 x k

f (x k )

k 1,2,3,

f ( x )
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
f3 ( x1 , x2 , x3 ,..., xn ) 0
...
f n ( x1 , x2 , x3 ,..., xn ) 0
x x1

x2

x3

xn

x K 1

k
f
(
x
)
K
x
Ja( x k )

Onde:
df1

dx1
df 2
Ja dx
1
...

...

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
f ( x )
dx
k

k 1

xk

x f (x )

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

x
x k x k 1

x k x k 1
k

f (x ) f (x

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

dy
f ( x x) f ( x)
lim x0
dx
x

Utilizando os mtodos integrais:

>>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

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

yxt

Exemplo Equaes Diferenciais:


Sistema:

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

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);

xo 2
u0 0

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)

df ( x0 , t0 ) f ( x) f ( x1 , t1 ) f ( x0 , t0 )

dt
t
x1 x0

f(x1)

Passo de Integracao:

f(xo)
xo

x1

x2

h x1 x0

f ( x1 , t1 ) f ( x0 , t0 ) h.g ( x0 , t0 )

Mtodo de Euler Implcito :


Para sistemas :

df
f1 ( x1 , x2 , x3 ,..., xn )
dx1
f 2 ( x1 , x2 , x3 ,..., xn )

df
dx2

f 3 ( x1 , x2 , x3 ,..., xn )

df
dx3

...
df
f n ( x1 , x2 , x3 ,..., xn )
dxn
x x1

x2

x3

xn

Sistema de Equaes
Algbricas que devem ser
resolvidas simultaneamente:

f1 ( x1 , t ) f1 ( x0 , t0 ) h. f1 ( x0 , t0 )
f 2 ( x1 , t ) f 2 ( x0 , t0 ) h. f 2 ( x0 , t0 )
f 3 ( x1 , t ) f 3 ( x0 , t0 ) h. f 3 ( x0 , t0 )
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
x
6y 0
dx 2
2

d y
z
dx
d z 6y
2
dx
x

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

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. x 2 x12

1 x
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:

Devemos Escrever na Forma:

S 3 x1 2 x2 4 x3

min f'*x

2 x1 8 x2 9 x3 5

s.a.: A.x <= b

1.6 x1 4.7 x2 8 x3 4

Aeq.x=Beq

x1 5 x3 8
x2 0

f 3 2 4
'

1.6 4.7 8

1 0 5

Aeq 2 8 9

Lb-limite inferior

beq 5

Inf
ub 0
Inf

Ub-Limite superior

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

Inf
lb Inf
Inf

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 x12 2 x22 3x32 4 x42 5 x52

s.a.

2
0

H 0
0

2 x1 x2 4 x3 x4 x5 0

5 x1 2 x3 x4 x5 0

x1 2 x2 x3 6

0 0
4
0
0
0

4 x3 x4 2 x5 0

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


2 1 4 1 1
0
f'*x
Aeq
beq
'
f 0 0 0 0 0

5 0 2 1 1

1 2 1 0 0
0
4 1 2
0

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

S=17.7989

0
6
0
0

0 0
0 0
0 0
8 0

0 10

Otimizao:
Programao No Linear:
Exemplo: min
s. a.

exp( x1 ). 4 x12 2 x22 4 x1 x2 2 x2 1


1.5 x1 x2 x1 x2 0

x1 x2 10

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;

>>[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)