You are on page 1of 8

Ecuaciones Diferenciales Profesora: Mª Pilar Laburta

Práctica 2 Dpto. de Matemática Aplicada

Métodos numéricos para PVI asociados a


ecuaciones de primer orden

• Objetivos:
- Resolver numérica y gráficamente PVI para ecuaciones diferenciales de primer orden
utilizando el método de Euler.
- Resolver numérica y gráficamente PVI para ecuaciones diferenciales de primer orden
utilizando la función ode45 de Matlab.
- Estudiar los errores globales cometidos en las resoluciones numéricas.

• Métodos numéricos:

Una EDO de primer orden no siempre se puede resolver explícitamente en términos


de funciones elementales. Para la resolución numérica del PVI

y' = f(x,y), x∈[x0,xf], y(x0) = y0 (1)

que supondremos con solución única y(x), se divide el intervalo de integración [x0,xf] en N
partes, y se obtienen los puntos:
x0 < x1 < x2 < ....................< xN=xf
donde, si el paso h es constante, h=(xf - x0)/N, se tiene
xn = x0 + n h, n=0,1,2,...,N.
Para cada n, un método numérico proporciona aproximaciones yn a la solución exacta de
(1) en cada punto xn: y(xn) ≈ yn.

• Método de Euler:

El método de Euler con paso fijo h, h>0, proporciona aproximaciones yn de los valores
y(xn) de la solución exacta del PVI (1) mediante la fórmula

yn+1 = yn + h f(xn,yn), n=0,1,2,…,N.

• Crea en el editor de Matlab un fichero función, euler.m, que implemente de manera


sencilla este método. La primera línea de este fichero debe ser:
function [x,y]=euler(f,x0,xf,y0,N)
siendo los argumentos de salida:
x: vector conteniendo los puntos x0,...,xN.
y: vector conteniendo las aproximaciones numéricas y0,...,yN.

Para ejecutar este fichero función, escribiremos:

1
Ecuaciones Diferenciales Profesora: Mª Pilar Laburta
Práctica 2 Dpto. de Matemática Aplicada

>> [x,y]=euler(f,x0,xf,y0,N)

habiendo definido previamente los argumentos de entrada. En particular, habremos


definido la función f(x,y) como función "inline":

>> f=inline('expresión','x','y')

1) Dado el PVI:
y'=x/y, y(0)=1
a) Obtener la aproximación a la solución de este problema en el punto x=0.3 obtenida al
aplicar el método de Euler con paso 0.1.
f=inline('x./y','x','y')
f =
Inline function:
f(x,y) = x./y

x0=0; xf=0.3; y0=1; h=0.1; N=ceil((xf-x0)/h);

[x,y]=euler(f,x0,xf,y0,N)
x =
0
0.1000
0.2000
0.3000
y =
1.0000
1.0000
1.0100
1.0298

b) Calcular el error de dicha aproximación, comparándola con la solución exacta en ese


punto.
dsolve('Dy=x/y','y(0)=1','x')
ans =
(x^2+1)^(1/2)

abs(subs('(x^2+1)^(1/2)', 'x',0.3)-y(end))
ans =
0.0142

c) Obtener la aproximación a la solución de este problema en el punto x=0.3 obtenida al


aplicar el método de Euler con paso 0.05, y hallar el error cometido.
x0=0; xf=0.3; y0=1; h=0.05; N=ceil((xf-x0)/h);

[x,y]=euler(f,x0,xf,y0,N)
x =
0
0.0500
0.1000
0.1500

2
Ecuaciones Diferenciales Profesora: Mª Pilar Laburta
Práctica 2 Dpto. de Matemática Aplicada

0.2000
0.2500
0.3000
y =
1.0000
1.0000
1.0025
1.0075
1.0149
1.0248
1.0370

abs(subs('(x^2+1)^(1/2)', 'x',0.3)-y(end))
ans =
0.0070

d) Se sabe que el error global y(xn) - yn  cometido por el método de Euler satisface:
y(xn) - yn  ≤ C h
donde C es una constante independiente de h. Los errores obtenidos en b) y c), ¿están
de acuerdo con este resultado?. Sí.

2) Se considera el PVI:
y' = -y - 5 e-x sen 5x, y(0) = 1
a) Obtener la expresión de yn+1 en función de xn, yn que da el método de Euler al
aplicarlo a este problema con paso h=0.05.
f(x,y)=-y - 5 e-x sen 5x
yn+1 = yn + h f(xn,yn) = yn + h (-yn -5e-xn sen 5xn) = (1-h)yn + h (-5e-xn sen 5xn)
= 0.95yn + h (-5e-xn sen 5xn) , n=0,1,2,.....

b) Resolver numéricamente ese problema para 0≤x≤3 utilizando la función euler, y


representar gráficamente la solución numérica obtenida.
clear all
f=inline('-y-5*exp(-x).*sin(5*x)','x','y')
f =
Inline function:
f(x,y) = -y-5*exp(-x).*sin(5*x)

x0=0; xf=3; y0=1; h=0.05; N=(xf-x0)/h;

[x,y]=euler(f,x0,xf,y0,N); plot(x,y)

c) Calcular la solución exacta del PVI dado utilizando dsolve, y representarla


gráficamente (en rojo) en la misma figura que la solución numérica.
dsolve('Dy=-y-5*exp(-x)*sin(5*x)','y(0)=1','x')
ans =
exp(-x)*cos(5*x)

hold on; fplot('exp(-x)*cos(5*x)',[0,3],'r')

3
Ecuaciones Diferenciales Profesora: Mª Pilar Laburta
Práctica 2 Dpto. de Matemática Aplicada

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6
0 0.5 1 1.5 2 2.5 3

d) ¿Cuál es el máximo error global y(xn) - yn  obtenido?.

max(abs(y-exp(-x).*cos(5*x)))
ans =
0.0775

• Solución numérica con ode45:

ode45 es una función de Matlab que implementa un método numérico (concretamente,


combina un método Runge–Kutta (RK) de orden 4 con otro método RK de orden 5) para la
integración de sistemas de EDO de primer orden. La sintaxis es:

>>[x,y]=ode45(f,[x0,xf],y0)

donde f es una función definida con "inline" (ó el nombre, entre apóstrofes, del fichero
función que la define). Los valores de x en los que ode45 calcula la solución numérica se
almacenan en el vector x de salida, y las correspondientes aproximaciones numéricas se
almacenan en el vector y de salida. Para obtener y dibujar esta solución numérica,
combinaremos la orden anterior con la orden plot en la forma:

>>[x,y]=ode45(f,[x0,xf],y0); plot(x,y)

Para obtener y dibujar la solución numérica de (1) en [a,x0], a<x0, pondremos los valores
de x en orden decreciente, es decir,
>>[x,y]=ode45(f,[x0,a],y0); plot(x,y)

3) Se considera el PVI:
y' = x/ y, y(0) = 1

4
Ecuaciones Diferenciales Profesora: Mª Pilar Laburta
Práctica 2 Dpto. de Matemática Aplicada

a) Representar en la misma figura la solución exacta de este PVI, y la solución


numérica que proporciona ode45 en el intervalo [0,5]. ¿Puedes diferenciarlas?.
clear all; hold off
dsolve('Dy=x/y','y(0)=1','x')
ans =
(x^2+1)^(1/2)

fplot('(x^2+1)^(1/2)',[0,5],'r')

f=inline('x./y','x','y')
f =
Inline function:
f(x,y) = x./y

hold on
[x,y]=ode45(f,[0 5],1);plot(x,y)

5.5

4.5

3.5

2.5

1.5

1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

b) Obtener en tres columnas los valores de x, yn (solución numérica obtenida con


ode45) e y(x) (solución exacta), para x=0, 0.2, 0.4, ... , 2, todos ellos con 15 dígitos
significativos.

[x,y]=ode45(f,0:0.2:2,1);

yex=(x.^2+1).^(1/2);

format long

[x,y,yex]

ans =

5
Ecuaciones Diferenciales Profesora: Mª Pilar Laburta
Práctica 2 Dpto. de Matemática Aplicada

0 1.00000000000000 1.00000000000000
0.20000000000000 1.01980390030003 1.01980390271856
0.40000000000000 1.07703295800176 1.07703296142690
0.60000000000000 1.16619037435052 1.16619037896906
0.80000000000000 1.28062484165690 1.28062484748657
1.00000000000000 1.41421355599242 1.41421356237310
1.20000000000000 1.56204992884201 1.56204993518133
1.40000000000000 1.72046504740386 1.72046505340853
1.60000000000000 1.88679622083269 1.88679622641132
1.80000000000000 2.05912602304385 2.05912602819740
2.00000000000000 2.23606797273725 2.23606797749979

c) Representar gráficamente las soluciones numéricas obtenidas con ode45 en [-3,5]


para la ecuación dada con las condiciones iniciales y(0)=1, 1.2, 1.4, ... ,2.8, 3.
hold off

[xi,yi]=ode45(f,[0 -3],1:0.2:3); plot(xi,yi)

hold on

[xd,yd]=ode45(f,[0 5],1:0.2:3);plot(xd,yd)

5.5

4.5

3.5

2.5

1.5

1
-3 -2 -1 0 1 2 3 4 5

4) Considerar el PVI: y'=x+y2, y(0)=1


a) ¿Se puede obtener la solución exacta de este PVI en términos de funciones
elementales?
clear all; hold off

dsolve('Dy=x+y^2','y(0)=1','x')

6
Ecuaciones Diferenciales Profesora: Mª Pilar Laburta
Práctica 2 Dpto. de Matemática Aplicada

ans =
((3*gamma(2/3)^2*3^(2/3)-
2*pi*3^(5/6))/(3*gamma(2/3)^2*3^(1/6)+2*pi*3^(1/3))*AiryAi(1,-
x)+AiryBi(1,-x))/((3*gamma(2/3)^2*3^(2/3)-
2*pi*3^(5/6))/(3*gamma(2/3)^2*3^(1/6)+2*pi*3^(1/3))*AiryAi(-x)+AiryBi(-
x))

b) Representar la solución numérica obtenida en [0,1] con ode45.


f=inline('x+y.^2','x','y')
f =
Inline function:
f(x,y) = x+y.^2

[x,y]=ode45(f,[0 1],1);plot(x,y)

Warning: Failure at t=9.305611e-001. Unable to meet integration


tolerances without reducing the step size below the smallest value
allowed (1.776357e-015) at time t.
> In <a href="error:c:\matlab7\toolbox\matlab\funfun\ode45.m,355,1">ode45
at 355</a>

14
x 10
4.5

3.5

2.5

1.5

0.5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

axis([0 1 0 100])

7
Ecuaciones Diferenciales Profesora: Mª Pilar Laburta
Práctica 2 Dpto. de Matemática Aplicada

100

90

80

70

60

50

40

30

20

10

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

c) ¿Para que valores de x>0 está definida la solución?


En (0,x*), con x*≈ 9.305611e-001