Curso de Métodos Numéricos. Ecuaciones diferenciales ordinarias Curso: Métodos Numéricos en Ingenierı́a Profesor: Dr. José A. Otero Hernández Universidad: ITESM CEM Fecha: Lunes, 11 de noviembre de 2014 Introducción Método de Euler Método de Heun Tópicos 1 Introducción 2 Método de Euler Ejemplo Error de truncamiento del método de Euler 3 Método de Heun Ejemplo 2 4 Programa MATLAB Programa MATLAB Introducción Método de Euler Método de Heun Tópicos 1 Introducción 2 Método de Euler Ejemplo Error de truncamiento del método de Euler 3 Método de Heun Ejemplo 2 4 Programa MATLAB Programa MATLAB Introducción Método de Euler Método de Heun Programa MATLAB Ecuaciones diferenciales ordinarias En esta clase nos dedicaremos a la solución de ecuaciones diferenciales ordinarias de la forma: dy = f (x, y) dx Anteriormente se utilizó un método numérico para resolver una ecuación como la anterior (caso de la velocidad del paracaidista). En este caso se utilizo el método: Nuevo valor = valor anterior + pendiente × tamaño Introducción Método de Euler Método de Heun Programa MATLAB Ecuaciones diferenciales ordinarias En esta clase nos dedicaremos a la solución de ecuaciones diferenciales ordinarias de la forma: dy = f (x, y) dx Anteriormente se utilizó un método numérico para resolver una ecuación como la anterior (caso de la velocidad del paracaidista). En este caso se utilizo el método: Nuevo valor = valor anterior + pendiente × tamaño Introducción Método de Euler Método de Heun Programa MATLAB Ecuaciones diferenciales ordinarias En esta clase nos dedicaremos a la solución de ecuaciones diferenciales ordinarias de la forma: dy = f (x, y) dx Anteriormente se utilizó un método numérico para resolver una ecuación como la anterior (caso de la velocidad del paracaidista). En este caso se utilizo el método: Nuevo valor = valor anterior + pendiente × tamaño Introducción Método de Euler Método de Heun Programa MATLAB Ecuaciones diferenciales ordinarias Matemáticamente: yi+1 = yi + φh φ es la pendiente estimada. La pendiente estimada se utiliza para extrapolar desde el valor anterior yi = y(xi ) a un nuevo valor yi+1 = y(xi+1 ) a una distancia h. Esta fórmula se aplica paso a paso para buscar los valores de y posteriores. Todos los métodos de un paso que se expresen de esta forma se diferencian solamente por la manera en la que se estime la pendiente. Introducción Método de Euler Método de Heun Programa MATLAB Ecuaciones diferenciales ordinarias Matemáticamente: yi+1 = yi + φh φ es la pendiente estimada. La pendiente estimada se utiliza para extrapolar desde el valor anterior yi = y(xi ) a un nuevo valor yi+1 = y(xi+1 ) a una distancia h. Esta fórmula se aplica paso a paso para buscar los valores de y posteriores. Todos los métodos de un paso que se expresen de esta forma se diferencian solamente por la manera en la que se estime la pendiente. Introducción Método de Euler Método de Heun Programa MATLAB Ecuaciones diferenciales ordinarias Matemáticamente: yi+1 = yi + φh φ es la pendiente estimada. La pendiente estimada se utiliza para extrapolar desde el valor anterior yi = y(xi ) a un nuevo valor yi+1 = y(xi+1 ) a una distancia h. Esta fórmula se aplica paso a paso para buscar los valores de y posteriores. Todos los métodos de un paso que se expresen de esta forma se diferencian solamente por la manera en la que se estime la pendiente. Introducción Método de Euler Método de Heun Programa MATLAB Ecuaciones diferenciales ordinarias Matemáticamente: yi+1 = yi + φh φ es la pendiente estimada. La pendiente estimada se utiliza para extrapolar desde el valor anterior yi = y(xi ) a un nuevo valor yi+1 = y(xi+1 ) a una distancia h. Esta fórmula se aplica paso a paso para buscar los valores de y posteriores. Todos los métodos de un paso que se expresen de esta forma se diferencian solamente por la manera en la que se estime la pendiente. Introducción Método de Euler Métodos de un paso Método de Euler Método de Heun Método de Heun Programa MATLAB Introducción Método de Euler Método de Heun Tópicos 1 Introducción 2 Método de Euler Ejemplo Error de truncamiento del método de Euler 3 Método de Heun Ejemplo 2 4 Programa MATLAB Programa MATLAB Introducción Método de Euler Método de Heun Método de Euler Dada la ecuación diferencial: dy = f (x, y) dx Se puede encontrar la solución como: yi+1 = yi + f (xi , yi ) h Esta fórmula se conoce como método de Euler. Programa MATLAB Introducción Método de Euler Método de Euler Método de Heun Programa MATLAB Introducción Método de Euler Método de Heun Programa MATLAB Ejemplo Ejemplo Con el método de Euler resuelva numéricamente la ecuación: dy = −2x3 + 12x2 − 20x + 8.5 dx desde x = 0 hasta x = 4 con un tamaño de paso de 0.5. La condición inicial en x = 0 es y = 1. Calcule el error relativo verdadero si se conoce que la solución exacta es: y = −0.5x4 + 4x3 − 10x2 + 8.5x + 1 Introducción Método de Euler Método de Heun Programa MATLAB Ejemplo Solución ejemplo clear ; clc ; h=0.5; x =[0:h : 4 ] ; n=length ( x ) ; f = i n l i n e ( ’−2∗x ˆ3+12∗ xˆ2−20∗x +8.5 ’ , ’ x ’ , ’ y ’ ) ; y e x a c t o = i n l i n e ( ’ −0.5∗x ˆ4+4∗ xˆ3−10∗x ˆ 2 + 8 . 5 ∗ x+1 ’ , ’ x ’ ) ; y ( 1 ) =1; ev ( 1 ) =abs ( y ( 1 )−y e x a c t o ( x ( 1 ) ) ) / y e x a c t o ( x ( 1 ) ) ∗100; f o r i =2: n y ( i ) =y ( i −1)+ f ( x ( i −1) , y ( i −1) ) ∗h ; ev ( i ) =abs ( y ( i )−y e x a c t o ( x ( i ) ) ) / y e x a c t o ( x ( i ) ) ∗100; end s a l i d a = [ x ’ y ’ ev ’ ] ; disp ( s a l i d a ) e z p l o t ( y ex ac to , [ 0 , 4 , 0 , 7 . 5 ] ) ; hold on plot ( x , y , ’ o ’ ) Introducción Método de Euler Ejemplo Solución ejemplo x 0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 y 1.0000 5.2500 5.8750 5.1250 4.5000 4.7500 5.8750 7.1250 7.0000 Error 0 63.1068 95.8333 130.9859 125.0000 74.7126 46.8750 50.9934 133.3333 Método de Heun Programa MATLAB Introducción Método de Euler Ejemplo Solución ejemplo Método de Heun Programa MATLAB Introducción Método de Euler Ejemplo Solución ejemplo Método de Heun Programa MATLAB Introducción Método de Euler Método de Heun Error de truncamiento del método de Euler Error de truncamiento Serie de Taylor 00 0 yi+1 = yi + yi h + yi 2 h + ··· 2! 0 donde h = xi+1 − xi . Pero yi = f (xi , yi ), entonces: 0 yi+1 f (xi , yi ) 2 = yi + f (xi , yi )h + h + ··· 2! Error de truncamiento 0 εt = f (xi , yi ) 2 h 2! Programa MATLAB Introducción Método de Euler Método de Heun Error de truncamiento del método de Euler Error de truncamiento Serie de Taylor 00 0 yi+1 = yi + yi h + yi 2 h + ··· 2! 0 donde h = xi+1 − xi . Pero yi = f (xi , yi ), entonces: 0 yi+1 f (xi , yi ) 2 = yi + f (xi , yi )h + h + ··· 2! Error de truncamiento 0 εt = f (xi , yi ) 2 h 2! Programa MATLAB Introducción Método de Euler Método de Heun Error de truncamiento del método de Euler Error de truncamiento Serie de Taylor 00 0 yi+1 = yi + yi h + yi 2 h + ··· 2! 0 donde h = xi+1 − xi . Pero yi = f (xi , yi ), entonces: 0 yi+1 f (xi , yi ) 2 = yi + f (xi , yi )h + h + ··· 2! Error de truncamiento 0 εt = f (xi , yi ) 2 h 2! Programa MATLAB Introducción Método de Euler Método de Heun Programa MATLAB Error de truncamiento del método de Euler Solución ejemplo clear ; clc ; h=0.5; x =[0:h : 4 ] ; n=length ( x ) ; f = i n l i n e ( ’−2∗x ˆ3+12∗ xˆ2−20∗x +8.5 ’ , ’ x ’ , ’ y ’ ) fD= i n l i n e ( d i f f ( sym ( ’−2∗x ˆ3+12∗ xˆ2−20∗x +8.5 ’ ) ) , ’ x ’ , ’ y ’ ) ; y e x a c t o = i n l i n e ( ’ −0.5∗x ˆ4+4∗ xˆ3−10∗x ˆ 2 + 8 . 5 ∗ x+1 ’ , ’ x ’ ) ; y ( 1 ) =1; f o r i =2: n y ( i ) =y ( i −1)+ f ( x ( i −1) , y ( i −1) ) ∗h ; ev ( i ) =abs ( y ( i )−y e x a c t o ( x ( i ) ) ) / y e x a c t o ( x ( i ) ) ∗100; e t ( i ) =fD ( x ( i −1) , y ( i −1) ) / 2 ∗ h ˆ 2 ; end s a l i d a = [ x ( 2 : n ) ’ y ( 2 : n ) ’ ev ( 2 : n ) ’ e t ( 2 : n ) ’ ] ; disp ( s a l i d a ) Introducción Método de Euler Método de Heun Error de truncamiento del método de Euler Solución ejemplo con h = 0.5 x 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 y 5.2500 5.8750 5.1250 4.5000 4.7500 5.8750 7.1250 7.0000 ErrorVer 63.1068 95.8333 130.9859 125.0000 74.7126 46.8750 50.9934 133.3333 ErrorTrun −2.5000 −1.1875 −0.2500 0.3125 0.5000 0.3125 −0.2500 −1.1875 Programa MATLAB Introducción Método de Euler Método de Heun Error de truncamiento del método de Euler Solución ejemplo con h = 0.25 x 0.2500 0.5000 0.7500 1.0000 1.2500 1.5000 1.7500 2.0000 2.2500 2.5000 2.7500 3.0000 3.2500 3.5000 3.7500 4.0000 y 3.1250 4.1797 4.4922 4.3438 3.9688 3.5547 3.2422 3.1250 3.2500 3.6172 4.1797 4.8438 5.4688 5.8672 5.8047 5.0000 ErrorVer 22.0442 29.8544 36.9863 44.7917 53.1274 60.2113 62.2678 56.2500 44.5699 33.0460 25.0731 21.0938 20.7417 24.3377 34.6624 66.6667 ErrorTrun −0.6250 −0.4492 −0.2969 −0.1680 −0.0625 0.0195 0.0781 0.1133 0.1250 0.1133 0.0781 0.0195 −0.0625 −0.1680 −0.2969 −0.4492 Programa MATLAB Introducción Método de Euler Método de Heun Tópicos 1 Introducción 2 Método de Euler Ejemplo Error de truncamiento del método de Euler 3 Método de Heun Ejemplo 2 4 Programa MATLAB Programa MATLAB Introducción Método de Euler Método de Heun Método de Heun Dada la ecuación diferencial: dy = f (x, y) dx Se puede encontrar la solución como: 0 yi+1 = yi + f (xi , yi ) h yi+1 = yi + 0 ) f (xi , yi ) + f (xi+1 , yi+1 h 2 Programa MATLAB Introducción Método de Euler Método de Heun Método de Heun Programa MATLAB Introducción Método de Euler Método de Heun Programa MATLAB Ejemplo 2 Ejemplo 2 Con el método de Heun resuelva numéricamente la ecuación: dy = −2x3 + 12x2 − 20x + 8.5 dx desde x = 0 hasta x = 4 con un tamaño de paso de 0.5. La condición inicial en x = 0 es y = 1. Calcule el error relativo verdadero si se conoce que la solución exacta es: y = −0.5x4 + 4x3 − 10x2 + 8.5x + 1 Introducción Método de Euler Método de Heun Programa MATLAB Ejemplo 2 Solución ejemplo 2 clear ; clc ; h=0.5; x =[0:h : 4 ] ; n=length ( x ) ; f = i n l i n e ( ’−2∗x ˆ3+12∗ xˆ2−20∗x +8.5 ’ , ’ x ’ , ’ y ’ ) ; y e x a c t o = i n l i n e ( ’ −0.5∗x ˆ4+4∗ xˆ3−10∗x ˆ 2 + 8 . 5 ∗ x+1 ’ , ’ x ’ ) ; y ( 1 ) =1; ev ( 1 ) =abs ( y ( 1 )−y e x a c t o ( x ( 1 ) ) ) / y e x a c t o ( x ( 1 ) ) ∗100; f o r i =2: n y0 ( i ) =y ( i −1)+ f ( x ( i −1) , y ( i −1) ) ∗h ; y ( i ) =y ( i −1) +( f ( x ( i −1) , y ( i −1) ) + f ( x ( i ) , y0 ( i ) ) ) / 2 ∗ h ; ev ( i ) =abs ( y ( i )−y e x a c t o ( x ( i ) ) ) / y e x a c t o ( x ( i ) ) ∗100; end s a l i d a = [ x ’ y ’ ev ’ ] ; disp ( s a l i d a ) % e z p l o t ( y ex ac to , [ 0 , 4 , 0 , 7 . 5 ] ) ; % h o l d on plot ( x , y , ’ ∗ ’ ) Introducción Método de Euler Ejemplo 2 Solución ejemplo 2 x 0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 y 1.0000 3.4375 3.3750 2.6875 2.5000 3.1875 4.3750 4.9375 3.0000 ErrorVerd 0 6.7961 12.5000 21.1268 25.0000 17.2414 9.3750 4.6358 0 Método de Heun Programa MATLAB Introducción Método de Euler Ejemplo 2 Solución ejemplo 2 Método de Heun Programa MATLAB Introducción Método de Euler Método de Heun Tópicos 1 Introducción 2 Método de Euler Ejemplo Error de truncamiento del método de Euler 3 Método de Heun Ejemplo 2 4 Programa MATLAB Programa MATLAB Introducción Método de Euler Método de Heun Método de Euler function e d o e u l e r ( F , x0 , x f , y0 , h ) f= i n l i n e (F, ’ x ’ , ’ y ’ ) ; x = [ x0 : h : x f ] ’ ; n = length ( x ) ; i f x ( n )<x f x ( n +1) = x f ; n = n +1; end y = y0∗ones ( n , 1 ) ; f o r i = 1 : n−1 y ( i +1) = y ( i ) + f ( x ( i ) , y ( i ) ) ∗ ( x ( i +1)−x ( i ) ) ; end fD= i n l i n e ( d i f f ( sym ( F ) ) , ’ x ’ , ’ y ’ ) ; f o r i i =1: n e t ( i i ) =fD ( x ( i i ) , y ( i i ) ) / 2 ∗ h ˆ 2 end s a l i d a = [ x y et ’ ] ; disp ( s a l i d a ) Programa MATLAB Introducción Método de Euler Solución ejemplo x 0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 y 1.0000 5.2500 5.8750 5.1250 4.5000 4.7500 5.8750 7.1250 7.0000 Método de Heun Programa MATLAB Introducción Método de Euler Método de Heun Programa MATLAB Método de Heun function edoheun ( F , x0 , x f , y0 , h ) f= i n l i n e (F, ’ x ’ , ’ y ’ ) ; x = [ x0 : h : x f ] ’ ; n = length ( x ) ; i f x ( n )<x f x ( n +1) = x f ; n = n +1; end y = y0∗ones ( n , 1 ) ; f o r i = 1 : n−1 y00 ( i +1)=y ( i ) + f ( x ( i ) , y ( i ) ) ∗ ( x ( i +1)−x ( i ) ) ; y ( i +1) = y ( i ) + ( f ( x ( i ) , y ( i ) ) + f ( x ( i +1) , y00 ( i +1) ) ) / 2 ∗ ( x ( i +1)−x ( i ) ) ; end salida =[ x y ] ; disp ( s a l i d a ) Introducción Método de Euler Solución ejemplo x 0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 y 1.0000 3.4375 3.3750 2.6875 2.5000 3.1875 4.3750 4.9375 3.0000 Método de Heun Programa MATLAB