Escolar Documentos
Profissional Documentos
Cultura Documentos
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: 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
Ax
3 2 3 6 5 6 9 8 0
X1=det(Ax)/det(A)
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)
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)
! 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])
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
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
k ( x L 1 )
x0 R
k 1
!x
k
f (x k ) (x fd )
k
k ! 1,2,3,-
f(x)
x*
x1
x0
x K 1
Onde:
df1 dx1 df 2 Ja ! dx 1 ... ...
f ( xk ) ! xK Ja ( x k )
f1 f f ( x) ! 2 f3 fn
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:
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]
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
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
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 )
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 )
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.
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.
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
d y !z dx
d z 6y ! 2 dx x
>>chute=-1.5 >> [x,y]=ode45(teste,[1 2],[1 chute]) Interpolando: para x=2 y=1.1 Soluo Precisa: chute=-1.516
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]
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
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 ub ! 0 Inf
Aeq ! ?2 8 9A
beq ! ? A 5
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
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
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)