Resolu¸ ca ˜o Num´ erica de Equa¸ co ˜es Diferenciais Ordin´ arias

Diogo Pinheiro Fernandes Pedrosa
Universidade Federal do Rio Grande do Norte Centro de Tecnologia Departamento de Engenharia de Computa¸ ca ˜o e Automa¸ ca ˜o http://www.dca.ufrn.br/

1

Introdu¸ c˜ ao

Uma Equa¸ ca ˜o Diferencial ´ e uma equa¸ ca ˜o que envolve derivadas de uma ou mais fun¸ co ˜es. Elas servem para descrever o comportamento de sistemas dinˆ amicos e possuem enorme aplica¸ ca ˜o em a ´reas como engenharia (comportamento de um circuito el´ etrico ou do movimento oscilat´ orio de estruturas), biologia (crescimento de popula¸ co ˜es de bact´ erias) ou economia (aplica¸ co ˜es financeiras). Elas s˜ ao classificadas de acordo com o seu tipo, ordem e grau. Se uma equa¸ ca ˜o diferencial envolve derivadas de uma fun¸ ca ˜o de uma u ´ nica vari´ avel independente, ela ´ e dita ser Equa¸ ca ˜o Diferencial Ordin´ aria. Caso a equa¸ ca ˜o diferencial envolva as derivadas parciais de uma fun¸ ca ˜o de duas ou mais vari´ aveis independentes, ela ´ e uma Equa¸ ca ˜o Diferencial Parcial. Uma equa¸ ca ˜o diferencial ordin´ aria (ou E.D.O.) de ordem n pode ser expressa na seguinte forma: dn y dy d2 y dn−1 y (1) = G x, y, , , . . . , dx2 dx dx2 dxn−1
d y , com onde x ´ e a vari´ avel independente, y ´ e uma fun¸ ca ˜o desta vari´ avel independente e d xk k = 1, 2, . . . , n s˜ ao as derivadas de y em rela¸ ca ˜o a x. O problema a ser tratado em Equa¸ co ˜es Diferenciais Ordin´ arias consiste em encontrar uma fun¸ ca ˜o y (ou solu¸ ca ˜o) que satisfa¸ ca a equa¸ ca ˜o 1. Esta solu¸ ca ˜o ´ e uma fun¸ ca ˜o que n˜ ao possui derivadas nem diferenciais e ela pode ser uma solu¸ ca ˜o geral ou particular. Uma solu¸ ca ˜o geral de uma E.D.O. de ordem n ´ e uma solu¸ ca ˜o contendo n constantes de integra¸ ca ˜o independentes e arbitr´ arias, como:
k

f (y ) = f (x) + c1 + c2 + . . . + cn Uma solu¸ ca ˜o particular ´ e obtida a partir da solu¸ ca ˜o geral, dando-se valores espec´ ıficos a `s constantes. Freq¨ uˆ entemente s˜ ao dadas as seguintes condi¸ co ˜es que permitem encontrar os valores das constantes obtidas pelas integra¸ co ˜es: y (x0 ) = y0 y (x1 ) = y1 y (x2 ) = y2 . . . (n−1) y (xn−1 ) = yn−1

M´ etodos Computacionais em Engenharia (DCA0304)

2

onde y0 ´ e um n´ umero dado. Os problemas de valor inicial (P.V.I.s) de ordem superior podem ser reduzidos a sistemas de primeira ordem atrav´ es de vari´ aveis auxiliares, o que permite a utiliza¸ ca ˜o dos m´ etodos num´ ericos aqui apresentados. Para resolver numericamente uma E.D.O. com P.V.I. (equa¸ ca ˜o 2), sup˜ oem-se que ela satisfaz a `s condi¸ co ˜es de existˆ encia e unicidade. Esta solu¸ ca ˜o num´ erica ser´ a encontrada para um conjunto finito de pontos (um intervalo fechado [a, b]) no eixo das abscissas. Tomando-se m subintervalos deste intervalo [a, b], sendo m ≥ 1, ´ e poss´ ıvel determinar m + 1 pontos onde as solu¸ co ˜es num´ ericas devem ser calculadas. Estes pontos xj ∈ [a, b] s˜ ao igualmente espa¸ cados entre si por um fator h, onde xj = x0 + j · h, sendo que x0 = a, xm = b, h = (b − a)/m e j = 0, 1, 2, . . . , m. O conjunto {x0 , x1 , x2 , . . . , xm } obtido denomina-se rede ou malha de [a, b]. A solu¸ ca ˜o num´ erica ´ e uma fun¸ ca ˜o linear por partes, ou seja, ´ e aplicada a cada subintervalo, cujo gr´ afico apresenta-se como uma poligonal com v´ ertices nos pontos (xj , yj ), sendo que yj ´ e calculado por algum m´ etodo a ser apresentado. Embora existam m´ etodos que apresentem uma boa precis˜ ao, os m´ etodos num´ ericos sempre apresentar˜ ao erros quando comparados com as solu¸ co ˜es exatas obtidas de uma solu¸ ca ˜o anal´ ıtica. A figura 1 ilustra como os erros afetam uma solu¸ ca ˜o num´ erica. Para facilitar a interpreta¸ ca ˜o dos m´ etodos, convenciona-se a seguinte nota¸ ca ˜o: • y (xj ) ´ e a solu¸ ca ˜o exata do P.V.I., obtida analiticamente; • yj ´ e a solu¸ ca ˜o num´ erica. H´ a trˆ es m´ etodos principais que ser˜ ao vistos na seguinte seq¨ uˆ encia: 1. M´ etodo de Euler; 2. M´ etodos de Runge-Kutta; e 3. M´ etodos de Adams-Bashforth.

Nestes casos, se x0 = x1 = x2 = · · · = xn−1 ent˜ ao o problema ´ e dito ser de valor inicial. Caso contr´ ario, o problema ´ e de valor de contorno. De uma maneira geral, a busca de uma solu¸ ca ˜o para uma equa¸ ca ˜o diferencial ordin´ aria com problema de valor inicial apresenta alguns problemas. Primeiro porque constata-se que os procedimentos para a busca de uma solu¸ ca ˜o anal´ ıtica n˜ ao ´ e trivial. O segundo problema ´ e que, al´ em disso, muitas quest˜ oes pr´ aticas n˜ ao possuem solu¸ ca ˜o conhecida. Por fim, em muitos casos os coeficientes ou as fun¸ co ˜es existentes na equa¸ ca ˜o diferencial s˜ ao dados somente na forma de um conjunto tabelado de informa¸ co ˜es experimentais, o que torna imposs´ ıvel o uso de um procedimento anal´ ıtico para determinar a solu¸ ca ˜o da equa¸ ca ˜o. Por isso h´ a a necessidade do uso de m´ etodos num´ ericos para equa¸ co ˜es diferenciais ordin´ arias. Ser˜ ao tratados aqui m´ etodos num´ ericos para se conseguir os valores de y (x) em pontos iniciais, ou seja, problemas de valor inicial. Tais problemas ser˜ ao abordados em sua forma mais simples que s˜ ao as equa¸ co ˜es diferenciais ordin´ arias de primeira ordem:   dy = f (x, y ) (2) dx  y (x0 ) = y0

1 S´ erie de Taylor de Fun¸ c˜ ao de uma Vari´ avel Uma fun¸ ca ˜o f a uma vari´ avel x. . . Sendo que o ponto inicial (x0 . y0 ) ´ e fornecido pelo problema. onde se utiliza m´ etodos num´ ericos. y2 . ´ e considerar apenas um n´ umero finito deles. Assim: (x − a) (x − a) (x − a) + f (a) + .. ym para as solu¸ co ˜es exatas y (x1 ). n˜ ao ´ e poss´ ıvel computar todos os seus termos. o primeiro passo ent˜ ao ´ e a busca de y1 .. O que se deseja ´ e encontrar as aproxima¸ co ˜es y1 .. (x − a)n n! 2 n−1 2 M´ etodo de Euler Seja uma Equa¸ ca ˜o Diferencial Ordin´ aria com Problema de Valor Inicial dada pela equa¸ ca ˜o 2. aproximando-se a solu¸ ca ˜o y (x) por uma S´ erie de Taylor no ponto x = x0 e truncando no segundo termo. . O que se faz. . .. . . tem-se: y (x) = y (x0 ) + y (x0 ) · (x − x0 ) . + f (n) (a) +. y (x2 ). Para isto. . 1! 2! n! Nas aplica¸ co ˜es pr´ aticas da S´ erie de Taylor. pode ser representada por uma s´ erie de potˆ encias da forma: f (x) = f (a) + f (a) (x − a) (x − a)2 (x − a)n + f (a) + . y (xm ). cont´ ınua e indefinidademente deriv´ avel e aproximada em torno do ponto x = a. truncando a s´ erie ap´ os o n-´ esimo termo.M´ etodos Computacionais em Engenharia (DCA0304) 3 Solução exata Solução aproximada y (x0 ) = y0 x0 x1 x2 xm Figura 1: Compara¸ ca ˜o ilustrativa entre uma solu¸ ca ˜o exata e uma aproximada de uma Equa¸ ca ˜o Diferencial Ordin´ aria 1. . . ent˜ ao. + f (n−1) (a) + Rn (x) f (x) ∼ = f (a) + f (a) 1! 2! (n − 1)! onde Rn (x) ´ e o erro de truncamento que pode ser expressado da seguinte forma: Rn (x) = f (n) (ξ ) com a < ξ < x.

ent˜ ao a quantidade de subintervalos na malha ´ e: m= o que implica em j = 0. 1] com h = 0. .1 x1 = 0. calcula-se primeiramente o x1 : xj = x 0 + j · h x1 = 0 + 1 · 0.1.1. . Assim. 9. a solu¸ ca ˜o aproximada ´ e: y2 = y1 + h · f (x1 . . Exemplo 1 Achar a solu¸ ca ˜o num´ erica para: y =x−y+2 y (0) = 2 na malha de [0. 1. 2. .1 b−a 1−0 = = 10 h 0. y0 ). y0 ) Para encontrar y2 na abscissa x = x2 adota-se o mesmo procedimento. m − 1. 2. Como ´ e uma equa¸ ca ˜o diferencial ordin´ aria com problema de valor inicial ent˜ ao. y1 ) Como ´ e poss´ ıvel verificar. y0 ) ´ sabido que y = f (x. . 1. pode-se aplicar a formula¸ ca ˜o de Taylor para todos os pontos dos subintervalos. onde h ´ e a distˆ ancia entre os pontos xj . . ent˜ ao: y1 = y0 + h · f (x0 . o que permite definir uma regra geral para o M´ etodo de Euler: yj +1 = yj + h · f (xj . Sendo o intervalo [0. y ) = x − y + 2. pelas condi¸ co ˜es iniciais dadas: x0 = 0 e y0 = 2. . Assim: E y1 = y0 + h · (x0 − y0 + 2) Substituindo os valores tem-se: y1 = 2 + 0.1 · (0 − 2 + 2) = 2 Para j = 1.1 . Assim. yj ) com j = 0. . s˜ ao utilizados os valores aproximados yj e que x1 − x0 = h e y (x0 ) = f (x0 . 1] e o espa¸ camento igual a 0. como os valores exatos y (xj ) s˜ ao desconhecidos.M´ etodos Computacionais em Engenharia (DCA0304) 4 Para x = x1 tem-se: y (x1 ) = y (x0 ) + (x1 − x0 ) · y (x0 ) Lembrando que. para j = 0 tem-se: y1 = y0 + h · f (x0 .

y(i) = exp(-x(i))+x(i)+1.M´ etodos Computacionais em Engenharia (DCA0304) 5 para.100000. A solu¸ ca ˜o anal´ ıtica para esse problema ´ e y (x) = e−x + x + 1. 0. 2. O resultado apresentado por este programa foi: Digite o valor do x inicial: 0 Digite o valor do y inicial: 2 Digite o valor do espacamento h: 0.000000.1 apresenta o programa de resolu¸ ca ˜o deste exemplo implementado em linguagem C. 2.900000. 2.1 − 2 + 2) y2 = 2. 0.090490.200000. 0. 2. a listagem mostrada no apˆ endice A. 0. 1. 2. e calculando-se o valor exato de y (x) por: -->for i=1:11.0187308 2.400000.000000.500000. 2.1:1]. 0. 2. Assim.1 · (0. uma vez que ser˜ ao encontrados m + 1 pontos. 2.0408182 ! ! ! ! . encontrar a aproxima¸ ca ˜o y2 : y2 = y1 + h · (x1 − y1 + 2) y2 = 2 + 0.178297. 2.056100. 2. b]: --> x = [0:0. 0.348679.230467. torna-se vi´ avel a elabora¸ ca ˜o de um programa computacional para resolvˆ e-lo.1 Digite o n´ umero de subintervalos m: 10 Os valores de x e y sao: 0. Para visualizar o seu comportamento pode-se utilizar o Scilab.600000.300000.01 Os c´ alculos prosseguem com este mesmo procedimento at´ e j = 9. 0. o resultado obtido ´ e: -->y y = ! ! ! ! 2. Como o trabalho apresenta-se longo e rotineiro.131441.700000.029000. 0.000000.0048374 2. end.800000. 2. em seguida.287421. Assim.010000.000000. 2. 0. defindo-se a malha do intervalo [a.

3 0.1488116 2.3 2. o M´ etodo de Euler tem o problema de apresentar erros.0 x Figura 2: Compara¸ ca ˜o entre o resultado anal´ ıtico (linha tracejada) e o M´ etodo de Euler (linha s´ olida).1 0.2 0. por fim. para contruir o gr´ afico no Scilab basta digitar na linha de comando: -->plot2d(x. 2.4 0.249329 2.7 0.0 1. ´ e poss´ ıvel ter uma id´ eia deste erro.y) A figura 2 mostra uma compara¸ ca ˜o gr´ afica entre o resultado num´ erico obtido pelo m´ etodo de Euler (atrav´ es do programa escrito em C) e o resultado anal´ ıtico (calculado no Scilab).M´ etodos Computacionais em Engenharia (DCA0304) 6 ! ! ! ! ! ! ! 2. Embora seja simples. Nota-se que ele depende do espa¸ camento h.5 0.07032 2.6 0.8 0. Este erro ´ e chamado de erro local de truncamento.3065697 2. Como foi utilizado a S´ erie de Taylor para deduzir o M´ etodo de Euler.4 2.9 1.1065307 2. uma vez que as aproxima¸ co ˜es para o valor exato y (xj ) s˜ ao dependentes de aproxima¸ co ˜es anteriores. .2 y 2. ent˜ ao o erro de truncamento ´ e dado por: ej +1 = R2 (xj ) = y (ξ ) h2 2! com xj < ξ < xj +1 .3678794 ! ! ! ! ! ! ! e.9 0 0.1 2. De certa forma.1965853 2.

´ e apresentado na figura 3. para encontrar esta fun¸ ca ˜o φ(·). tem-se como resultado: Digite o valor do x inicial: 0 Digite o valor do y inicial: 2 Digite o valor do espacamento h: 0. yj . 2. dependem dos valores das aproxima¸ co ˜es calculadas anteriormente. basta apenas expressar a aproxima¸ ca ˜o yj +1 utilizando trˆ es termos da S´ erie.900000.M´ etodos Computacionais em Engenharia (DCA0304) 7 Dessa forma.000000. 2. yj ) ∂x ∂y h2 · y (xj ) 2 Para encontrar a solu¸ ca ˜o basta aplicar o m´ etodo normalmente utilizando esta f´ ormula apresentada. por´ em. 0. dependendo da aplica¸ ca ˜o. cujo gr´ afico.1 Digite o n´ umero de subintervalos m: 10 Os valores de x e y sao: 0.800000. 2.041218. Uma maneira de reduzir estes erros ´ e diminuir o valor do espa¸ camento h. comparado com o resultado anal´ ıtico. . . yj ).600000. 1. yj ) + f (xj . m − 1. ent˜ ao: y (xj ) = ∂ ∂ f (xj .000000. 0.000000. y. y ) deve-se utilizar uma outra fun¸ ca ˜o φ(x. 2. Como a S´ erie de Taylor foi utilizada para definir o M´ etodo de Euler ent˜ ao. 2.307227.100000. Percebese que. 2. 2. para esta metodologia. 1.300000.005000. Outra alternativa ´ e utilizar a seguinte regra para o M´ etodo de Euler: yj +1 = yj + h · φ(xj . 0. uma vez que as aproxima¸ co ˜es. 0.019025. 2. yj ) · f (xj . 0. .368541. 0. Isto resulta na seguinte f´ ormula: yj +1 = yj + h · y (xj ) + Sendo y (xj ) = f (xj . Esta regra diz que no lugar da fun¸ ca ˜o y = f (x. h) que envolva tamb´ em o espa¸ camento h. 2. . isto aumentaria o esfor¸ co computacional. 2. pode-se afirmar que o M´ etodo de Euler sofre com o erro local de truncamento citado e pelo fator de propaga¸ ca ˜o deste erro. h) com j = 0. 0. o gr´ afico do m´ etodo num´ erico sobrep˜ oe-se ao gr´ afico do m´ etodo anal´ ıtico.500000. em cada itera¸ ca ˜o. 0.700000. 2.107076.070802.197210. Resolvendo o exemplo anterior por este m´ etodo.149403. 2. 0.249975. .200000.400000.

Os dois principais s˜ ao:  · (K1 + K2 )  yj +1 = yj + h 2 K1 = f (xj . A op¸ ca ˜o ent˜ ao ´ e utilizar m´ etodos que tenham uma boa precis˜ ao mas que n˜ ao necessite das derivadas de ordem superior. H´ a v´ arios m´ etodos que s˜ ao diferenciados por sua ordem.6 0. o M´ etodo de Euler n˜ ao ´ e utilizado na pr´ atica. A grande desvantagem ´ e que em aplica¸ co ˜es pr´ aticas n˜ ao h´ a o conhecimento da forma anal´ ıtica de f (x. n˜ ao ´ e poss´ ıvel utilizar derivadas de ordem mais elevada nem estimar o erro local de truncamento para tais casos.3 2.M´ etodos Computacionais em Engenharia (DCA0304) 2. Assim. Estes recursos s˜ ao chamados de M´ etodos de Runge-Kutta. ´ e o pr´ oprio m´ etodo de Euler.2 0. y ). O mais simples ´ e o RungeKutta de primeira ordem que concorda com o m´ etodo de Euler.2 y 2. y ). . yj )  K2 = f (xj + h. m − 1.1 2.9 0 0.4 0.4 8 2.1 0. H´ a tamb´ em os M´ etodos de Runge-Kutta de segunda ordem.0 x Figura 3: Compara¸ ca ˜o entre o resultado anal´ ıtico (linha tracejada) e o M´ etodo de Euler definido pela S´ erie de Taylor com trˆ es termos (linha s´ olida).0 1. Eles podem assumir diferentes formatos. 3 M´ etodos de Runge-Kutta com j = 0. O segundo Mesmo utilizando recursos para diminuir o erro. 1. 2. . ou seja.3 0. A pr´ oxima se¸ ca ˜o apresentar´ a estes m´ etodos. yj + h · K1 ) .5 0.9 1. .7 0. Este m´ etodo ´ e chamado de Euler Melhorado.8 0. Em seu lugar aplica-se recursos que possuem uma precis˜ ao satisfat´ oria e dispensem as derivadas de ordem superior de f (x. .

yj + h · K3 ) com erro local de truncamento igual a: ej = e xj −1 < ξ < xj . o mais popular ´ e o de 4a ordem. y0 = 2 e que a quantidade de subintervalos ´ e igual a 10. Destas informa¸ co ˜es. O modo como estas f´ ormulas foram obtidas encontra-se no livro texto [1]. y + K ) K = f ( x +  j j  2 2 2  3 K4 = f (xj + h. yj + 2 h 2 · K1 ) . 1] com h = 0. . Nota-se que este erro ´ e menor que o apresentado pelo M´ etodo de Euler mais simples e igual ao erro que o m´ etodo de Euler possui se for utilizado a f´ ormula obtida pela S´ erie de Taylor at´ e o terceiro termo. que ´ e bastante difundido nas rotinas de c´ alculo computacional [1]. A sua formula¸ ca ˜o geral ´ e:  · (K1 + 2K2 + 2K3 + K4 ) yj +1 = yj + h  6     K1 = f (xj . Exemplo 2 Resolver o exemplo anterior utilizando o M´ etodo de Runge-Kutta de quarta ordem. . Assim. Dentre os m´ etodos de Runge-Kutta. 2. . mas ´ e chamado de Euler Modificado. Os m´ etodos de Runge-Kutta de segunda ordem possuem erro local de truncamento igual a: h3 · y (ξ ) ej = 3! sendo xj −1 < ξ < xj . ´ e poss´ ıvel identificar que x0 = 0. yj )  K2 = f (xj + h . O exemplo anterior diz que a equa¸ ca ˜o diferencial ordin´ aria com problema de valor inicial ´ e dada por: y =x−y+2 y (0) = 2 na malha de [0. y0 ) x0 − y 0 + 2 0−2+2 0 h5 (v) · y (ξ ) 5!   yj +1 = yj + h · K2 K1 = f (xj . 1. o ´ ındice j varia de 0 at´ e 9. yj + h K ) 2 2 1  h h  .M´ etodos Computacionais em Engenharia (DCA0304) 9 m´ etodo ´ e: tamb´ em com j = 0. .1. yj ) K2 = f (xj + h . Para j = 0: K1 = = = = f (x0 . m − 1.

1 = 2+ · (0 + 2 · 0.070320.0025) = 0. 0.0025 + 2 = 0.249329. y0 + h · K3 ) f (0 + 0. 1.500000.09525) 6 = 2. 0.2. que foi aplicado para este mesmo exemplo por´ em com o M´ etodo de Euler.196585. .000000.1.1 0.200000.05 h h K3 = f (x0 + .0475) f (0. ent˜ ao ser´ a utilizado o programa escrito em C.700000. 2.05 − 2 + 2 = 0.400000.300000.800000. y0 + K2 ) 2 2 0. 0. 0. 2. 2. 2.018731.004838.367880. Os resultados apresentados foram: Os valores de x e y sao: 0.1 . 2.05 − 2.00475) 0.148812.1 . 2.1 · 0. 0.05.000000. 2. 2) = 0. 0. 2.040818.M´ etodos Computacionais em Engenharia (DCA0304) 10 h h K2 = f (x0 + .09525 h · (K1 + 2K2 + 2K 3 + K4 ) 6 0.106531. 2.05) = f (0 + 2 2 = f (0.1.00475 + 2 0.100000.0475 + 0.05.2+ · 0. 2 + 0.306570.000000. 2. Estas mudan¸ cas podem ser vistas no apˆ endice A.2+ · 0) = f (0 + 2 2 = f (0.0475 K4 = = = = = O valor da aproxima¸ ca ˜o ´ e: y1 = y 0 + f (x0 + h. 2.600000.05 + 2 · 0. 0.1 0.900000. y0 + K1 ) 2 2 0. Como ´ e um procedimento cansativo para se fazer manualmente. 2.1 − 2. com algumas modifica¸ co ˜es. 2. 0.0048375 Este procedimento deve ser repetido at´ e que j = 9. 0.

5 0. 2.3 2. y (β )) · dβ para quaisquer pontos x e x + q no intervalo [a. Um m´ etodo ´ e dito ser de passo k se ele precisar de k resultados anteriores.0 1. yj ) num conjunto de pontos xj . Os m´ etodos de Adams-Bashforth baseiam-se na id´ eia de substituir a fun¸ ca ˜o f (x. calcula-se a sua integral e aceita-se o seu valor como incremento para calcular yj +1 .3 0. ou seja. por um polinˆ omio interpolador que assuma valores fj = f (xj .2 y 2. uma solu¸ ca ˜o exata de uma E. O termo β ´ e uma vari´ avel de integra¸ ca ˜o. y ) · dx (3) .4 0. Eles fazem parte dos m´ etodos de passo m´ ultiplo. Por defini¸ ca ˜o. que precisam somente de um valor calculado anteriormente).1 2. b].9 0 0.1 0. Na figura 4 as curvas das solu¸ co ˜es exata e num´ erica se sobrep˜ oem.9 1.4 2.6 0. y (x)).D.8 0. de primeira ordem com problema de valor inicial ´ e: x+q y (x + q ) = y (x) + x f (β. que ´ e desconhecida. s˜ ao m´ etodos que precisam de mais de um valor calculado anteriormente para determinar a aproxima¸ ca ˜o yj +1 (diferentemente dos M´ etodos de Euler e Runge-Kutta. Assim. 4 M´ etodos de Adams-Bashforth Os m´ etodos de Adams-Bashforth s˜ ao baseados em integra¸ ca ˜o num´ erica.0 x Figura 4: Compara¸ ca ˜o dos resultados obtidos analiticamente (linha tracejada) e da solu¸ ca ˜o a num´ erica por Runge-Kutta de 4 ordem (linha s´ olida).O.M´ etodos Computacionais em Engenharia (DCA0304) 11 Se comparada com o resultado anal´ ıtico vˆ e-se que o resultado ´ e bastante satisfat´ orio.2 0. onde yj j´ a foi obtido ou est´ a sendo calculado.7 0. atrav´ es de: xj +1 yj +1 = yj + xj f (x.

y1 ). ´ e poss´ ıvel utilizar o M´ etodo de passo dois para encontrar y2 . Tendo agora estes dois valores. Assim. m − 1. . Sendo uma Equa¸ ca ˜o Diferencial Ordin´ aria (E. . 3. 4.).O.V. Desse modo: P1 (x) = b0 p0 (x) + b1 p1 (x) onde: p0 (x) = x − x1 p1 (x) = x − x0 f0 b0 = x0 − x 1 f1 b1 = x1 − x 0 Substituindo este polinˆ omio na equa¸ ca ˜o 4 e lembrando que x1 − x0 = h. . . calcula-se a aproxima¸ ca ˜o y1 . . ent˜ ao pode-se utilizar a seguinte regra: h yj +1 = yj + · (3fj − fj −1 ) 2 com j = 1. por´ em lembrando que somente devem ser utilizados os pontos (x1 .M´ etodos Computacionais em Engenharia (DCA0304) 12 4. . y1 ) e (x2 . ent˜ ao: y2 = y 1 − f0 h x2 p0 (x) · dx + x1 f1 h x2 p1 (x) · dx x1 Integrando esta equa¸ ca ˜o e rearranjando os termos. Salienta-se ainda que y1 deve ser calculado por Euler ou Runge-Kutta. . 2. .D. y0 ) = f0 e f (x1 . m − 1.) com Problema de Valor Inicial (P. o resultado fica: y2 = y 1 + h · (3f1 − f0 ) 2 Para calcular y3 adota-se o mesmo procedimento. y1 ) = f1 s˜ ao conhecidos ent˜ ao pode-se aproximar a fun¸ ca ˜o f (x. .1 Adams-Bashforth de Passo Dois Por ser de passo dois. este m´ etodo necessita de dois valores calculados anteriormente. y ) · dx (4) Como os valores f (x0 . y2 ): y3 = y 2 + h · (3f2 − f1 ) 2 Como este procedimento tamb´ em ´ e utilizado para j = 3. y ) pelo polinˆ omio interpolador de primeiro grau P1 (x). y0 ).I. utilizando a equa¸ ca ˜o 3: x2 y2 = y 1 + x1 f (x. Atrav´ es de algum m´ etodo de passo simples. tem-se o valor do primeiro ponto (x0 . obtendo o segundo ponto (x1 .

5. que tamb´ em necessita de y4 . Assim. Este valor predito pode ser obtido por Adams-Bashforth de passo quatro: h P · (55f3 − 59f2 + 37f1 − 9f0 ) y4 = y3 + 24 Escrevendo de uma forma generalista: P yj +1 = yj + fjP +1 C yj +1 h · (55fj − 59fj −1 + 37fj −2 − 9fj −3 ) 24 P = f (xj +1 . o polinˆ omio interpolador deve ser de terceiro grau. y2 ) e (x3 . enquanto o valor de y 4 foi obtido atrav´ es de uma predi¸ ca ˜o. ´ e poss´ ıvel adotar a seguinte nota¸ ca ˜o: y4 = y 3 + C y4 = y3 + cujo resultado ´ e: h P · (9f4 + 19f3 − 5f2 + f1 ) 24 P P sendo f4 = f (x4 . m − 1. . . y1 ). yj +1 = yj + 4. O que se deseja ent˜ ao ´ e melhorar a precis˜ ao da aproxima¸ ca ˜o y4 . . y4 ). por´ em utiliza quatro pontos previamente calculados: (x0 . (x2 . Os termos y1 . utilizando-se um polinˆ omio interpolador de terceira ordem para aproximar a fun¸ ca ˜o f (x. m − 1. yj +1 ) h · (9fjP = yj + +1 + 19fj − 5fj −1 + fj −2 ) 24 com j = 3. (x2 . y0 ). Assim: xj +1 yj +1 = yj + xj P3 (x) · dx com: P3 (x) = b0 p0 (x) + b1 p1 (x) + b2 p2 (x) + b3 p3 (x) que integrando resulta em: h · (55fj − 59fj −1 + 37fj −2 − 9fj −3 ) 24 sendo j = 3. Este problema pode ser contornado se a equa¸ ca ˜o 5 for usada apenas para corre¸ ca ˜o. y ). (x3 . Neste caso tem-se cinco pontos conhecidos mas apenas quatro s˜ ao utilizados: (x1 . Por utilizar estes quatro pontos. 4. (x1 . . y4 ). y2 ). 4. y2 e y3 devem ser calculados por m´ etodos de passo simples ou por Adams-Bashforth de passo dois. y3 ). y4 ). Portanto. . y1 ). y3 ) e (x4 . tem-se: x4 y4 = y 3 + x3 P3 (x) · dx h · (9f4 + 19f3 − 5f2 + f1 ) (5) 24 ´ poss´ E ıvel perceber uma incoerˆ encia nesta equa¸ ca ˜o pois para calcular a aproxima¸ ca ˜o y4 necessita-se de f4 = f (x4 .3 M´ etodo de Adams-Bashforth-Moulton de Passo Quatro Este m´ etodo tamb´ em ´ e chamado de Preditor-Corretor.M´ etodos Computacionais em Engenharia (DCA0304) 13 4.2 Adams-Bashforth de Passo Quatro Tem os mesmos princ´ ıpios do m´ etodo de passo dois. Para resolver um problema de valor inicial com o par Preditor-Corretor tem-se que seguir trˆ es fases: . . . .

0. 1. 0. Dessa forma. 3. P (d) Calcula-se novamente f4 com o valor atualizado. Calcula-se o valor predito y4 .140000. 1. 0. 1.011635.004132. 0. isto ´ e. 0. 0.060000. 0. . y2 e y3 por um m´ etodo de passo simples de quarta ordem.000000. 0. 0. Para as aproxima¸ co ˜es seguintes (y5 .100000.006618. 1. 0. . y4 ← y4 .190000. y6 .090000. 0.070000. 1.160000.010000. . P P C (c) Atualiza-se y4 . A aproxima¸ ca ˜o y4 ser´ a este u ´ ltimo valor calculado. Exemplo 3 Obter as aproxima¸ co ˜es para a equa¸ ca ˜o diferencial ordin´ aria com problema de valor inicial:   y (x) = x − 2xy − 1 x2  y (1) = 0 O m´ umero de subintervalos a ser calculado ´ e: m= 2−1 = 100 0.004910.003409.080000. 1.M´ etodos Computacionais em Engenharia (DCA0304) 14 1. 1. 1.001602.3. 1.110000.001134. 0.005740.120000.002743.000000. Corrige-se este valor predito: P (a) Calcula-se f4 . 0.000049. 1.009512. .000192. 0. 1.150000.180000. C (b) Calcula-se y4 .050000.01 na malha de [1. tem-se as seguintes aproxima¸ co ˜es: 1. 1.007541.010556. 0. 1.000740. 0. C (e) Calcula-se novamente y4 com o valor atualizado. 0. ym ) deve-se utilizar os mesmos procedimentos das fases 2 e 3.008507.01. 1.170000. 0. 1.012746.130000. .000424.002140. 1. P 2.020000. utilizando o programa listado no apˆ endice A. 0.030000. 1. 1. 1. 0. 2] com espa¸ camento igual a 0. Calculam-se y1 .040000.

1. 0. 0.054074. 1.043741.064431. 0. 1.500000.057037. 0.018730. 1.230000.659999.360000.052593.330000.033608. 0. 1.649999. 0. 1.061477. 1.340000. 0.046682. 0. 0.310000. 1. 1.035035. 1. 0. 0.200000. 1.529999. 1. 0.559999.021290. 1.490000. 1. 0. 1. 0.470000. 0.030782.042277. 0. 0.059998.051113.079039.068846. 0.067377.080480. 1. 1.589999.070312.016259.280000.639999. 0.599999.040816.071776.250000. 0.039361. 0. 1. 0. 0. 0. 0.539999.028000.350000. 0.510000.320000. 1. 1.025269. 1.013889. 1.390000. 0.440000.058518.M´ etodos Computacionais em Engenharia (DCA0304) 15 1.549999. 1. 1. 0. 1. 0. 1. 0. 1. 0. 1.045210. 0. 1. .290000.015060.073236. 0. 1. 0.300000.430000.579999.048157.520000. 0.062955.220000.629999.049634.569999.450000. 0. 0.036470.270000.065905.055556.074692. 0. 0.240000.370000. 1.017483. 1.032190.037912.669999. 0. 0.260000.400000.619999. 1.022599.480000.023926. 0. 1. 1. 1.609999. 0.460000.020000. 0.029385. 1. 1. 0. 1. 1. 1.077594. 1. 1. 0.026627.076145.410000. 1. 0.420000.380000. 1. 1. 0. 1.210000.

0. 1. 1.689999.809999.759999.083348. 1.101497. 0. 0. 1. 0. 0.719999. 1. 1. 0. 0.889999.999999. 1.939999.78) (0. 0. 1.097391. 0.959999.089027. 1.112188.679999. 1. 1.909999.709999.119950. 1. 0. 1.116097.9) Observa¸ c˜ ao 2 Uma equa¸ ca ˜o diferencial ordin´ aria com problema de valor inicial pode ser solucionada numericamente atrav´ es de uma fun¸ ca ˜o pr´ opria do Scilab chamada ode.769999. 0.919999. 0. 0.090435. 1. 0. 1.949999. 1. deve-se digitar na linha de comando do Scilab: -->help ode .979999. 1.105551.102855.121222.098765. 1.739999.110873. 0. Este resultado pode ser plotado no Scilab (figura 5). 0. 0.M´ etodos Computacionais em Engenharia (DCA0304) 16 1. 0.699999.118672. Para saber mais sobre ela.989999. 1.114800. 0.879999.969999. 1. 1.109552.729999. 0.123747. 0. 0.117388. 1. 1.081916. 1.829999.859999.091837.106891. 1.087615. 1.084775.799999. 0. 0.122487.929999. 2.779999.899999. M´ etodo Euler RK2 RK4 ABM4 Intervalo (0.086197. 0. 0.839999. 0.819999. 1.125000.104206.100134. 0. 1.096011. 1. 0. 0.094625.789999. 2) (0.869999.093233.849999. 1. Observa¸ c˜ ao 1 Intervalo de varia¸ ca ˜o do espa¸ camento h para garantir a estabilidade do m´ etodo.113497. 0.108224. 0. 0. 1. 1. 2) (0. 0.749999.

0 1.7 1. para os seguintes problemas de valor inicial: y (x) = x − y + 2 y (0) = 2 na malha [0.1.   y (x) = y − 2x y (b)  y (0) = 1 na malha de [0. 1] com h = 0. 1] com h = 0. 5 1.5 1.1. (a) y (x) = x − y + 2 y (0) = 2 na malha de [0.   y (x) = 1 x (c)  y (1) = 0 na malha de [1. .3 1.8 1. Achar as aproxima¸ co ˜es para os problemas a seguir utilizando os M´ etodos de RungeKutta.14 17 0.2. por M´ etodo de Euler.6 1. (a) 2.12 0.0 x Figura 5: Resultado apresentado pelo m´ etodo Preditor-Corretor.02 0 1.1 1.06 0.9 2.08 0.05 e h = 0. utilizando o Euler Melhorado. Exerc´ ıcios Achar as aproxima¸ co ˜es. 2] com h = 0. 1] com h = 0.2 1.01 (sugest˜ ao: criar um programa em alguma linguagem de preferˆ encia e resolver este problema).04 0.10 y 0.4 1.M´ etodos Computacionais em Engenharia (DCA0304) 0.

4. 1].   y (x) = y − 2x y  y (0) = 1 na malha de [0.1.1.Caracter´ ısticas Matem´ aticas e Computacionais dos M´ etodos Num´ ericos . usando o Euler Melhorado. Comparar os resultados com a solu¸ ca ˜o exata: y (x) = 1−x 1+x 3. 2] com h = 0. Luiz H. Segunda edi¸ ca ˜o.1. Jo˜ ao T. y1 ) e (x2 . Magali M. D´ ecio Sperandio. M´ arcio L. y2 ). Miriam L. Segunda edi¸ ca ˜o. 2003. usando o Preditor-Corretor. [2] Matem´ atica para Economia e Administra¸ ca ˜o . usando o Euler Modificado. Campos. y0 ). Monken e Silva. Jean E. 1987. (x1 . Barroso. 2001. 2] com h = 0. Carvalho. 2] com h = 0. Compare os resultados plotando os gr´ aficos. . Conhecidos os pares (x0 . PrenticeHall.   y (x) = x − 2xy − 1 x2  y (1) = 0 na malha de [1. 1] com h = 0. Mendes. B. Weber. obter o M´ etodo Preditor-Corretor de passo dois. Editora Harbra. Barroso. (b) y (x) = −xy 2 y (1) = 2 na malha de [1. usando o Runge-Kutta de quarta ordem. [3] C´ alculo Num´ erico . usando o Runge-Kutta de quarta ordem.1. usando o Runge-Kutta de quarta ordem e o Preditor-Corretor.05. com h = 0.1 e h = 0. 1] com h = 0. Frederico F. Maia. A. Referˆ encias [1] C´ alculo Num´ erico (com aplica¸ co ˜es) .  2  y (x) = y − 1 x2 + 1  y (0) = 1 na malha de [0.M´ etodos Computacionais em Engenharia (DCA0304) 18 (b) (c) (d) (e)   y (x) = 1 x  y (1) = 0 na malha de [1. Editora Harbra. Leˆ onidas C. Obter as aproxima¸ co ˜es para os problemas a seguir utilizando os M´ etodos de AdamsBashforth-Moulton:  2  y (x) = y − 1 (a) x2 + 1  y (0) = 1 na malha de [0.1.

scanf("%f". for(j=0. return(0). printf("Digite o n´ umero de subintervalos m: \n").h> // Declara¸ ca ~o da fun¸ ca ~o (derivada) float dy(float.j++) { x[j+1] = x[j] + h.y[j]).&y0).M´ etodos Computacionais em Engenharia (DCA0304) 19 A A.x[j]. y[j+1] = y[j] + h*dy(x[j]. printf("Digite o valor do espacamento h: \n").h> #include <stdio. \n".j<=m. float y) { return(x-y+2). int m.j<m. y0. } . scanf("%f".&h). scanf("%d". } // Escopo da fun¸ ca ~o (derivada) float dy(float x. j. printf("Digite o valor do y inicial: \n").j++) printf("%f. float). // Entrada de dados printf("Digite o valor do x inicial: \n"). y[0] = y0. x[0] = x0. %f. for(j=0. scanf("%f". y[m+1]. } // Exibi¸ ca ~o dos valores de x e y printf("Os valores de x e y sao:\n"). // C´ alculo de x e y pelo M´ etodo de Euler float x[m+1]. int main() { // Declara¸ ca ~o das vari´ aveis float x0. y[j]).1 Listagem de Programas M´ etodo de Euler // Inclus~ ao das bibliotecas do C (possuem fun¸ co ~es necess´ arias ao // programa) #include <math.&m). h.&x0).

x[j]. y[j]+(h/2)*K2). printf("Digite o scanf("%f". K4. printf("Digite o scanf("%f". j. } float dy(float x. K2 = dy(x[j]+h/2.j<=m. y[j]).j<m.&y0). int main() { float x0. y[j]+(h/2)*K1). float y) { return(x-y+2).M´ etodos Computacionais em Engenharia (DCA0304) 20 A. x[j+1] = x[j] + h. int m. valor do x inicial: \n"). y[j+1] = y[j] + (h/6)*(K1 + 2*K2 + 2*K3 + K4). printf("Digite o scanf("%f". K4 = dy(x[j]+h. for(j=0. valor do y inicial: \n"). K3 = dy(x[j]+h/2. } printf("Os valores de x e y sao:\n").h> #include <stdio.j++) printf("%f.h> float dy(float. h. K2.2 Runge-Kutta de Quarta Ordem #include <math.&m). \n". float).&x0). return(0). printf("Digite o scanf("%d". %f. valor do espacamento h: \n"). y[j]+h*K3). x[0] = x0. float x[m+1]. y[0] = y0. y[m+1]. n´ umero de subintervalos m: \n"). float K1.j++) { K1 = dy(x[j]. } . K3. y0. for(j=0.&h). y[j]).

K2.j<m. for(j=3.y[j-1]) + dy(x[j-2]. float). y[j+1] = y[j] + (h/24)*(9*dy(x[j+1].j++) { x[j+1] = x[j] + h. yp = y[j] + (h/24)*(55*dy(x[j].y[j-1]) + dy(x[j-2]. K4 = dy(x[j]+h. h. K4.yc) + 19*dy(x[j]. y[j]+(h/2)*K1).&m).y[j]) 5*dy(x[j-1].h> #include <stdio. int main() { float x0.y[j]) .j++) { K1 = dy(x[j]. valor do y inicial: \n").yp) + 19*dy(x[j].y[j-2]) . valor do x inicial: \n").y[j]) 5*dy(x[j-1].59*dy(x[j-1]. y[m+1]. printf("Digite o scanf("%d". . y[j]+h*K3). float K1. y[0] = y0. x[0] = x0. yc.&h). // Defini¸ ca ~o de um ponteiro para um arquivo (para gravar) // os dados printf("Digite o scanf("%f".y[j-1]) + 37*dy(x[j-2]. y0. FILE *arqv. K3.M´ etodos Computacionais em Engenharia (DCA0304) 21 A.y[j-2])). printf("Digite o scanf("%f".y[j-2])). K2 = dy(x[j]+h/2. yc = y[j] + (h/24)*(9*dy(x[j+1]. y[j]). j. K3 = dy(x[j]+h/2. } // C´ alculo dos outros elementos pelo Preditor-Corretor float yp. printf("Digite o scanf("%f". int m.9*dy(x[j-3].j<3.&x0).h> float dy(float.&y0).3 Preditor-Corretor de Passo Quatro #include <math. for(j=0.y[j-3])). y[j]+(h/2)*K2). valor do espacamento h: \n"). // C´ alculo de x[0]->x[3] e y[0]->y[3] pelo m´ etodo RK4 float x[m+1]. x[j+1] = x[j] + h. y[j+1] = y[j] + (h/6)*(K1 + 2*K2 + 2*K3 + K4). n´ umero de subintervalos m: \n").

2)). \n".j<=m.sci’!\n"). } fclose(arqv). } float dy(float x.j++) { fprintf(arqv.sci". float y) { return((x .j). } .M´ etodos Computacionais em Engenharia (DCA0304) 22 } // Grava¸ ca ~o dos resultados em um arquivo do Scilab arqv = fopen("resultado. printf("Numero de elementos: %d\n". printf("Os valores de x e y estao em ’resultado.2*x*y -1)/powf(x. for(j=0.x[j]. %f."%f."w"). return(0).y[j]).

Sign up to vote on this title
UsefulNot useful