15
aAula - M´
etodos Num´
ericos e Optimiza¸
c˜
ao
Programa¸
c˜
ao
Mestrado em Engenharia F´ısica Tecnol´
ogica
Samuel M. Eleut´erio sme@tecnico.ulisboa.pt
Departamento de F´ısica Instituto Superior T´ecnico
M´
etodos Num´
ericos - Introdu¸
c˜
ao
A quest˜ao central do estudo de qualquer sistema´e (ou tende a ser) a previs˜ao do seu comportamento em instantes
posteriores (ou anteriores) `aqueles para os quais dispomos de
informa¸c˜ao – condi¸c˜oes iniciais (oucondi¸c˜oes fronteiras). Essa descri¸c˜ao pode fazer-se por:
1 Equa¸c˜oes Diferenciais: equa¸c˜oes que relacionam asfun¸c˜oes
com as suas derivadas, tendo portanto umcar´acter local. S˜aoclassificadaspela derivada demaior grau que incluem.
2 Equa¸c˜oes Integrais: equa¸c˜oes que relacionam asfun¸c˜oescom
os seus integrais, tendo portanto um car´acter n˜ao local(ou
global).
Essas duas formula¸c˜oes s˜ao basicamente equivalentes e a op¸c˜ao por uma ou outra tem essencialmente a ver com o modo como se adaptam ao problema em causa.
Aqui vamos limitarmo-nos `as equa¸c˜oes diferenciais.
Introdu¸
c˜
ao
Porque experimentalmente se verifica que a for¸ca est´a directamente relacionada com a acelera¸c˜ao, isto ´e, com a segunda derivada do espa¸co em ordem ao tempo, uma quantidade muito significativa das equa¸c˜oes diferenciais em F´ısica s˜ao de 2a ordem.
Do ponto de vista pr´atico, para cada problema, temos de responder `as seguintes quest˜oes:
1 Que equa¸c˜ao(em geral, diferencial) deveremos usar para
descrever o problema em causa;
2 Que m´etodospodemos usar pararesolvertotal ou parcialmente
essa equa¸c˜aoe... aplic´a-los.
Uma parte muito substancial dos trabalhos em F´ısica destina-se a responder uma destas quest˜oes.
Introdu¸
c˜
ao
No nosso caso vamos estar mais interessados na segunda tarefa, isto ´e, uma vez conhecida uma certa equa¸c˜ao diferencial, como podemos obter a sua solu¸c˜ao num´erica a partir das condi¸c˜oes iniciais espec´ıficas doproblema.
E, qual o compromisso que devemos fazer entre a precis˜ao dos c´alculos, otempo de desenvolvimento, otempo de c´alculo
e, de um modo geral, com os recursos dispon´ıveis.
Na obten¸c˜ao desolu¸c˜oes existe ainda um outro problema: o estabelecimento das condi¸c˜oes fronteiras (condi¸c˜oes iniciais). ´
E, em muitos casos, uma quest˜ao bastante dif´ıcil de resolver e depende, essencialmente, dotipo de equa¸c˜ao em causa. N˜ao iremos estud´a-la aqui.
Equa¸
c˜
oes Diferenciais
Seja a equa¸c˜ao diferencial de 1a ordem:dx
dt = f (x , t)
em que ’f(x,t)’ ´e uma fun¸c˜ao de ’x’ e de ’t’.
Um caso simples e conhecido de todos ´e (com ’c’ constante):
dx
dt = c ⇒ dx = c dt ⇒ x = R c dt + c1
em que c1 ´e umaconstante de integra¸c˜ao e com solu¸c˜ao:
x (t) = c t + c1
A solu¸c˜ao aqui obtida chama-se solu¸c˜ao geralda equa¸c˜ao diferencial e descreve os processos f´ısicos por ela regidos. Ao particularizar, adaptam-se asconstantes de integra¸c˜ao a um problema espec´ıfico, obtendo-se umasolu¸c˜ao particular. Designa-se por fixa¸c˜ao das condi¸c˜oes iniciais (oucondi¸c˜oes fronteiras), o processo de obten¸c˜ao dos valores dasconstantes de integra¸c˜ao, que satisfazem um determinado problema.
Decl´ınio Radioactivo
Um exemplo simples de uma equa¸c˜ao diferencial´e o problema do decl´ınio radioactivo:
Numa dada amostra, ´e constante a frac¸c˜ao de n´ucleos que se desintegram por unidade de tempo.
Ou seja, N(t+δt)−N(t) δt = − λ N(t) ⇒ dN dt = − λ N Resolvendo: dN N = − λ dt ⇒ ln(N) − ln(No) = ln( N No) = − λ (t − to)
Aplicando a fun¸c˜ao exponencial e fazendo to= 0, tem-se:
N = Noe−λ t
Define-se vida m´edia (τ) de uma substˆancia radioactiva como o intervalo de tempo necess´ario para que uma dada quantidade de n´ucleos dessa substˆancia se reduza a metade:
No
2 = Noe
−λ t1/2 ⇒
τ = t1/2 = ln 2λ
Decl´ınio Radioactivo - Resolu¸
c˜
ao Num´
erica
(’Prog30 01.c’)
Para se fazer a resolu¸c˜ao num´erica dodecl´ınio radioactivo vamos recorrer `a express˜ao inicial que vimos anteriormente:
N(t+δt)−N(t)
δt = −λN(t)
e explicitemos o n´umero de n´ucleos no instante ’t + δt’ em fun¸c˜ao dos valores no instante ’t’:
N(t + δt) = N(t) − λ N(t) δt
Ou seja, o n´umero de n´ucleos no instante ’t + δt’ ´e igual ao n´umero de n´ucleos no instante ’t’ menos ’λ N(t) δt’.
Assim, a express˜ao da lei do decl´ınio fornece-nos a forma expl´ıcita para fazer a suaimplementa¸c˜ao num´erica.
Equa¸
c˜
ao Diferencial de 1
aOrdem -
M´
etodo de Euler
Generalizando os resultados anteriormente exemplificados para o
decl´ınio radioactivo:
Seja uma equa¸c˜ao diferencial de 1a ordem:
dx
dt = f (x , t)
podemos discretiz´a-la:
x (t+δt)−x (t)
δt = f (x (t), t)
Explicitando o valor de ’x’ no instante ’t + δt’: x (t + δt) = x (t) + f (x (t), t) δt
A express˜ao anterior fornece um m´etodo para resolver iterativamente a equa¸c˜ao diferencial.
A este algoritmo chama-se m´etodo de Euler.
Como j´a vimos, para outros c´alculos, a escala do acr´escimo
’δt’ ´eessencial para se terem bons resultados. H´a que obter um equil´ıbrio entre a precis˜ao dos c´alculos e a sua eficiˆencia.
Precis˜
ao
(’Prog32 01.c’)
Para al´em dos errosinerentes aos m´etodos temos tamb´em os erros inerentes `as m´aquinas que usamos.
Como se sabe os computadores tˆem uma precis˜ao limitada e a sua correcta utiliza¸c˜ao exige que conhe¸camos as
caracter´ısticas espec´ıficas dos sistemas que usamos.
A precis˜ao m´axima, que podemos ter num c´alculo, pode ser obtida usando um programa que adiciona uma quantidade cada vez menor a uma vari´avel. Quando a vari´avel n˜ao ´e alterada atingimos o limite.
No tocante `a velocidade de c´alculo, ´e bom ter em conta que muitos compiladoresfazem internamente o c´alculo em ’double’. Nestas situa¸c˜oes, fazer os c´alculos em ’float’ poder´a conduzir a c´alculos mais lentos devido aos ’castings’ da´ı resultantes.
Eficiˆ
encia de C´
alculo
Em programascom um elevado n´umero de opera¸c˜oes´e essencial garantir uma elevada eficiˆencia das tarefas a executar.
Em mais do que uma ocasi˜ao, j´a verific´amos que a op¸c˜ao, por uma ou por outra solu¸c˜ao (algoritmo), nos conduz a tempos de c´alculos significativamente diferentes.
Tamb´em j´a se encontraram situa¸c˜oes, em que a mem´oria requerida pelo programa ´e superior`a que lhe pode ser atribu´ıda.
Os compiladores, em geral, disp˜oem de op¸c˜oes de optimiza¸c˜ao que permitem:
1 Diminuir o espa¸co de mem´oriautilizado; 2 Diminuir o tempo de c´alculo.
No entanto, devemos estar bem cientes de que a melhor optimiza¸c˜ao ´e a que fazemos ao desenvolver um programa.
Eficiˆ
encia de C´
alculo
Algumas regras b´asicas s˜ao essenciais na escrita do c´odigo de um programa:
Antes de come¸car a escrever um programadevemos
planific´a-lo cuidadosamente para garantir o menor n´umero de opera¸c˜oes;
Eliminar opera¸c˜oes entre constantes nos ciclos;
Usar macrospara implementar pequenas fun¸c˜oes de uso muito frequente. Isto aumenta o tamanho do c´odigo mas reduz o tempo de acesso `as fun¸c˜oes;
Reduzir ao m´ınimo o acesso de leitura e de escrita no ecran ou no disco;
Utilizar o qualificativo ’register’ em vari´aveis de utiliza¸c˜aomuito frequente (nem sempre funciona);
Eficiˆ
encia de C´
alculo
(’Prog32 02.c’ a ’Prog32 06.c’)
Os programasque se seguem (Prog32 02a6’) ilustram as consequˆencias dediferentes implementa¸c˜oes do c´odigo do mesmo programa b´asico. S˜ao apresentados ostempos de
CPU e os tempos de Rel´ogio em segundos:
Programa Op¸c˜ao de C´odigo CPU Rel´ogio
Prog32 02 C´odigo base sem escrita 0.24 0
Prog32 03 Escrita no ecran 31.61 68
Prog32 04 Escrita num ficheiro 5.55 6
Prog32 05 8./3. → 2.6666 0.13 0
Prog32 06 8./3. → 2.6666 e ’register’ 0.13 0
Eficiˆ
encia de C´
alculo
(’Prog32 07.c’ a ’Prog32 10.c’)
Os programas Prog32 07a10 mostrou as diferen¸cas de tempos de c´alculo que se obtˆem ao usar ’strlen’ na condi¸c˜ao de um ciclo:
1 (Prog32 07): usa ’strlen’ na condi¸c˜ao de um ciclo;
2 (Prog32 08): usa como condi¸c˜ao do ciclo ’str[k] != 0’;
3 (Prog32 09): usa com condi¸c˜ao do ciclo ’k < len’, em que
’len’ ´e o comprimento da string.
4 (Prog32 10): use uma macro e uma fun¸c˜ao para calcular o
quadrado
Programa Op¸c˜ao de C´odigo CPU Rel´ogio
Prog32 07 ’while (k < strlen(str))’ 5.99 6 Prog32 08 ’while (str[k] != 0)’ 1.92 2 Prog32 09 ’while (k < len)’ 1.92 2
Queda dos Corpos `
a Superf´ıcie da Terra
Como se disse, um n´umero muito significativo das equa¸c˜oes diferenciais, em F´ısica, s˜ao de 2a ordem.O movimento, a uma dimens˜ao (1-dim), sem atrito,de um corpo, `a superf´ıcie da Terra, ´e descrito pelalei de Newton:
F = −m g ⇔ mddt2x2 = −m g ⇔ d2x
dt2 = −g
Usando as defini¸c˜oes develocidade e acelera¸c˜ao, obtemos
dv dt = −g
dx
dt = v (t)
ou seja, transform´amos uma equa¸c˜ao diferencial de 2a ordem
num sistema deduas equa¸c˜oes diferenciais de1a ordem, que se podem resolver, como vimos anteriormente.
Assim, a partir da primeira (com to = 0):
dv = −g dt ⇔ Rv
vodv = −g
Rt
to=0dt ⇔ v (t) = −g t + vo
Substituindo este resultado nasegunda e integrando: dx = v dt ⇔ Rx xodx = Rt 0 v dt ⇔ x(t) = − 1 2g t 2+ v ot + xo a
Queda dos Corpos `
a Superf´ıcie da Terra com Atrito
Infelizmente, a maioria das equa¸c˜oes n˜ao s˜ao assim t˜aosimples de resolver como o caso anterior.
Se considerarmos agora uma for¸ca de atritoproporcional ao
quadrado da velocidade a 3-dim e a 1-dim: ~
Fa = −k v (t)2 ~|~vv | ; Fa = −k v (t)2sgn(v )
em que sgn(v )´e a fun¸c˜ao sinal.
Equa¸c˜ao do movimento da queda dos corpos com atrito: mddt2x2 = −m g − k v (t)2sgn(v )
Fazendo a sua decomposi¸c˜ao numsistema de duas equa¸c˜oes de 1a ordemediscretizandocom vista `a resolu¸c˜ao num´erica:
δv δt = −g − k mv 2sgn(v ) v = δx δt
ou seja, usando o m´etodo de Euler:
v (t + δt) = v (t) − g δt − mk v (t)2sgn(v (t)) δt
M´
etodo de Euler e M´
etodo de Euler-Cromer
(’Prog31 01.c’)
Como se viu, a discretiza¸c˜ao do problema anterior conduziu a: v (t + δt) = v (t) − g δt − mk v (t)2sgn(v (t)) δt
x (t + δt) = x (t) +vδt
Uma vez obtido o valor de v(t + δt), a partir da primeira equa¸c˜ao, temos dois valores poss´ıveis da velocidade para substituir na segunda equa¸c˜ao:
M´etodo de Euler: ovalor da velocidadecalculado no instante
’t’: ’v(t)’.
M´etodo de Euler-Cromer: o valor da velocidadecalculado
no instante ’t + δt’: ’v(t + δt)’.
Assim, o sistema anterior, usando o M´etodo de Euler-Cromer, toma a forma:
v (t + δt) = v (t) − g δt − mk v (t)2sgn(v (t)) δt x (t + δt) = x (t) +v(t + δt)δt
M´
etodo de Euler e M´
etodo de Euler-Cromer
Podemos sistematizar os dois m´etodos aqui descritos e analisar as suas diferen¸cas. Seja pois a equa¸c˜ao diferencial:d2x
dt2 = f (x (t), t)
O m´etodo de Euler conduz ao sistema: v (t + δt) = v (t) + f (x (t), t) δt x (t + δt) = x (t) + v (t) δt
Enquanto o m´etodo de Euler-Cromer conduz a: v (t + δt) = v (t) + f (x (t), t) δt
x (t + δt) = x (t) + v (t + δt) δt
Se substituirmos v(t + δt) na equa¸c˜ao de x(x + δt), obtemos: x (t + δt) = x (t) + v (t) δt + f (x (t), t) δt2
Como se pode ver, esta express˜ao ´e igual `a dom´etodo de Euler
mais o termo δt2, ou seja, o m´etodo de Euler-Cromer
M´
etodo Euler, Erros e Problemas
(’Prog33 01.c’)
Os m´etodos deEuler ou de Euler-Cromer baseam-se na hip´otese da derivada seraproximadamente constante no intervalo δt.No entanto, em muitas situa¸c˜oes, tal aproxima¸c˜ao n˜ao ´e razoavelmente satisfeita e h´a desvios em rela¸c˜ao `a solu¸c˜ao. E os erros v˜ao-seacumulando...
Para evidenciar as diferen¸cas que surgem entre assolu¸c˜oes exactas e aproximadas, podemos analisar a equa¸c˜ao:
dx
dt = x ⇒ x (t) = C e t
Pode ver-se no programa (’Prog33 01.c’) a diferen¸ca entre a solu¸c˜ao exacta e a solu¸c˜ao aproximada. Odesvio torna-se bastante evidente `a medida que se aumenta o passo ’dt’.
M´
etodo de Runge-Kutta de 2
aOrdem
J´a vimos que paramelhorar a convergˆencia das solu¸c˜oes num´ericas ´e conveniente procurar solu¸c˜oes n˜ao lineares. Seja a equa¸c˜ao diferenciale o termo n do m´etodo de Euler:dx
dt = f (x , t) xn+1= xn+ f (xn, tn) δt
Procuremos ent˜ao obter informa¸c˜ao sobre a derivada no
interior do intervalo para melhorar a estimativa do valor da fun¸c˜ao. Seja ’h’ o acr´escimo da vari´avel.
Designemos por k1 otermo de Euler:
k1 = h f (xn, tn)
Vamos agora fazer uma estimativa no meio do intervalo: k2 = h f (xn+ 12k1, tn+12 h)
Podemos ent˜ao calcular ovalor da fun¸c˜ao no final do intervalo: xn+1 = xn+ k2
Estas trˆesultimas express˜´ oes (k1, k2 exn+1) definem o m´etodo
M´
etodo de Runge-Kutta de 2
aOrdem
Decl´ınio Radioactivo
(’Prog30 02.c’ e ’33 02.c’)
A aplica¸c˜ao do m´etodo de Runge-Kutta de 2a ordemao decl´ınio radioactivo d´a: dx dt = −λ x em que f (xn, tn) = −λ xn Para k1 e k2 tem-se k1 = h f (xn, tn) k2 = h f (xn+12k1, tn+12h) k1 = −h λ xn k2 = h (− λ (xn+ 12k1))
Substituindo k1 em k2, obt´em-se
k2 = −λ h xn+ 12λ2h2xn
E finalmente, tem-se o termo geral: xn+1 = xn+ k2
xn+1 = xn− λ h xn+12λ2h2xn
que ´e uma express˜ao de segunda ordem em ’h’ (δt).
M´
etodo de Runge-Kutta de 4
aOrdem
O m´etodo de Runge-Kutta de 4a ordem´e provavelmente om´etodo de resolu¸c˜ao de equa¸c˜oes diferenciaismais utilizado, e generaliza o caso anterior (Ver ’Prog33 03.c’).
Nesta ordem, o m´etodo utiliza quatro termos: k1 = h f (xn, tn)
k2 = h f (xn+ 12k1, tn+12 h)
k3 = h f (xn+ 12k2, tn+12 h)
k4 = h f (xn+ k3, tn+ h)
O valor da fun¸c˜ao no final do intervalo ´e ent˜ao dado por: yn+1 = yn+16k1+13 k2+ 13k3+ 16k4
que ´e uma express˜ao com potˆenciasde ’h’ at´e `a 4a ordem.
Outras variantes deste m´etodo podem ser encontradas na
bibliografia da cadeira, bem como programas exemplificativos das suas implementa¸c˜oes.