You are on page 1of 36

Universidad de Santiago de Chile

Facultad de Ingeniera
Departamento de Ingeniera Elctrica

Matemtica Avanzada

Resolucin de ecuaciones
diferenciales utilizando Matlab

Por:

William Escudero

1er semestre 2015

Introduccin
Matlab cuenta con variadas formas de representar sistemas
que cambian o evolucionan en el tiempo.
En el presente documento se presentan dos formas de
resolver ecuaciones diferenciales utilizando Matlab. Algunas
de ellas son:
Utilizando mtodos numricos. Para ello se utiliza los mtodos
ODE##.
Mediante la resolucin analtica de ecuaciones diferenciales. Para
ello se presenta la herramienta DSOLVE, incluida en Matlab.
Empleando funciones de transferencia. Un ejemplo de esto es
Simulink.
2

Resolucin mediante ode

Mtodos ode##
Una ecuacin diferencial ordinaria (EDO) de primer orden es
una expresin que se puede escribir de la forma:

dy
y'
g ( x, y )
dx
Una solucin a una EDO de primer orden es una funcin
y=f(x) tal que f(x)=g(x,y)
La solucin de una ecuacin diferencial normalmente es una
familia de funciones, donde se requiere una condicin
inicial para determinar una solucin nica.
4

Mtodos ode##
Es preferible obtener la solucin analtica de una ecuacin
diferencial, pero muchas veces estas tienen soluciones
exactas complicadas, o en otros casos, simplemente no
poseen.
Para este tipo de casos se requiere de mtodos numricos
para resolver las ecuaciones diferenciales, siendo las
tcnicas numricas ms comunes el mtodo de Euler y los
mtodos de Runge-Kutta.
Matlab cuenta con funciones ODE## para calcular
soluciones numricas de ecuaciones diferenciales
ordinarias.

Mtodos ode##
Considerar la funcin dy f (t , y )
dt

y (t0 ) y0

En Matlab se escribe de la siguiente forma:


[t, y] = ode45(g, [t0, t1], inicial)
[t,y] representan la solucin de la ecuacin diferencial utilizando el
mtodo ode45 (Runge-Kutta de 4to y 5to orden (RK45)).

[t0,t1] representa el intervalo o extremos de la solucin.


inicial especifica el valor inicial de la funcin en el extremo
izquierdo, es decir, inicial y (t0 )
6

Mtodos ode##
Se debe definir la ecuacin a resolver, lo cual se puede
hacer de la siguiente forma:
g = inline('funcion', 't', 'y')
funcion es la funcin dy f (t , y ) a resolver.

dt

t es la variable independiente e y es la variable dependiente.


El comando inline permite definir funciones vectoriales.

Tipos de ode##
Matlab cuenta con distintos tipos de algoritmos numricos
para la resolucin de EDO.
Sentencia

Tipo de
mtodo

Tipo de
problema

Orden de exactitud

Mtodo

ode45

Explcito

No stiff

Medio

Runge-Kutta

ode23

Explcito

No stiff

Bajo

Runge-Kutta

ode113

Explcito

No stiff

Bajo a Alto

Adams

ode15s

Implcito

Stiff

Bajo a Alto

Back difference
formula (BDF)

ode23s

Implcito

Stiff

Bajo, a veces ms
estable que ode15s

Rosenbrock

ode23t

Implcito

Moderadamente Stiff

Bajo, a veces ms
estable que ode15s

Trapezoidal

ode23tb

Implcito

Stiff

Bajo, a veces ms
estable que ode15s

TR-BDF2

Ejemplo N1: Utilizando inline


Ecuacin:
dy
t y, y (1) 2, en intervalo t [1,3]
dt

En Matlab escribimos:
[t, y] = ode45(inline('y*t', 't', 'y'), [1,3], 2)

g=inline('y*t', 't', 'y')


[t, y] = ode45(g, [1,3], 2)

Se obtienen dos vectores (t e y) con la solucin en el intervalo.

Solucin real:

y (t) C e

t 2 /2

Ejemplo N1: Utilizando inline


La solucin se puede graficar aplicando el comando plot(t,y)

Si se omite el trmino [t, y] al inicio de la expresin, Matlab dibujar


directamente la solucin, pero no entregar datos numricos.
ode45(inline('y*t', 't', 'y'), [1,3], 2)

10

Ejemplo N2: Familia de soluciones


Ecuacin:

dy
2t y, en intervalo t [2, 2]
dt
y0 (2) 20

Soluciones particulares:

y1 (2) 10
y2 (2) 10
y3 (2) 20

ODE en Matlab para cada caso


[t0,y0] = ode45(inline('2*y*t','t','y'), [-2,2], -20);
[t1,y1] = ode45(inline('2*y*t','t','y'), [-2,2], -10);
[t2,y2] = ode45(inline('2*y*t','t','y'), [-2,2], 10);
[t3,y3] = ode45(inline('2*y*t','t','y'), [-2,2], 20);
11

Ejemplo N2: Familia de soluciones


Graficando:

figure(1)
hold on
axis([-2 2 -20 20])
grid on
plot(t0,y0);
plot(t1,y1);
plot(t2,y2);
plot(t3,y3);

12

Ejemplo N3: Parmetros y Funciones


Si se desea resolver una ecuacin diferencial y modificar los
parmetros en una funcin externa, se puede hacer un
llamado a los parmetros utilizando @funcin.
En este caso no se puede usar inline, ya que no permite el uso de
parmetros.
Se puede hacer llamado a una funcin .m

El comando sera de la forma


[t, y] = ode45(@funcion, [t0, t1], inicial)

13

Ejemplo N3: Parmetros y Funciones


Para la funcin:
dx
ax b, y (0) 1, en intervalo t [0,5]
dt

a 1
b2

Se crea dos archivos .m


funcion1.m

ecuacion1.m

function [dx_dt]= funcion1(t,x)


a = -1;
b = 2;
dx_dt = a*x + b;
return

%dx_dt = a*x + b;
Xo = 1; %condicion inicial
tspan = [0,5];
%intervalo
[t,x] = ode113(@funcion1, tspan, Xo);
%grafico
figure;
hold on; plot(t,x,'r:'); ylabel('x'); xlabel('t') 14

Ejemplo N3: Parmetros y Funciones


El resultado es

15

Ejemplo N4: Sistema de EDOs


Resolver un sistema de ecuaciones diferenciales es similar a
resolver una sola ecuacin.
Es preferible utilizar funciones .m para incluir el sistema de
ecuaciones diferenciales.

Para este ejemplo se resolver el sistema de ecuaciones


diferenciales de Lorenz, las cuales son:
dx
x y
dt
dy
x y xz
dt
dz
z xy
dt

Para el ejemplo supondremos:


10
28
8/3

x(0) 8
y (0) 8
z (0) 27
16

Ejemplo N4: Sistema de EDOs


Los archivos en Matlab son:
lorenz.m
function xprima = lorenz(t,x);
%LORENZ: Computes the derivatives involved in
solving the
%Lorenz equations.
sig=10;
beta=8/3;
rho=28;
xprima=[-sig*x(1) + sig*x(2); rho*x(1) - x(2) x(1)*x(3); -beta*x(3) + x(1)*x(2)];
Notar que x se almacena como x(1), y como x(2) y z como x(3)
xprima es un vector columna.
17

Ejemplo N4: Sistema de EDOs


Los archivos en Matlab son:
EcuacionLz.m
%Ejemplo ecuacion de Lorenz
%Llama a la funcion lorenz
x0=[-8 8 27]; %condicion inicial
tspan=[0,20]; %intervalo
[t,x]=ode45(@lorenz,tspan,x0);
%grafico
subplot(2,2,1);
subplot(2,2,2);
subplot(2,2,3);
subplot(2,2,4);

plot(t,x(:,1));
plot(t,x(:,2));
plot(t,x(:,3));
plot(x(:,1),x(:,3));
18

Ejemplo N4: Sistema de EDOs


Las soluciones son:

19

Ejemplo N5: Solucin matricial


Supongamos que tenemos el sistema de ecuaciones
diferenciales lineales:

x1 ax1 bx2
x2 cx1 dx2

x1 a b x1
x c d x
2
2

Este problema se puede resolver directamente ingresando


la funcin matricial en un archivo .m
Para este ejemplo supondremos el problema

x1 1 1 x1
x 1 2 x
2
2

20

Ejemplo N5: Solucin matricial


Los archivos en Matlab son:
matricial.m
function [dxdt]= matricial(t,x)
M = [-1 -1; 1 -2]; %Matriz
dxdt = M*x;
%Ecuacion diferencial
return

EcuacionMtz.m
%Ejemplo ecuacion de matricial
Xo = [1;1];
%condiciones inicial
tspan = [0,5]; %intervalo
[t,X] = ode45(@matricial,tspan,Xo);
%grafico
figure(1)
hold on
plot(t,X(:,1));plot(t,X(:,2),'r:')
legend('x1','x2');
ylabel('x');
xlabel('t')

21

Ejemplo N5: Solucin matricial


La solucin es:

22

Adicionalmente
Se pueden configurar opciones para las funciones ode##
(tolerancias de error relativo y absoluto, tamao de paso,
cantidad de puntos, etc).
Para ms informacin, revisar archivos de ayuda de los
diferentes mtodos:
help ode45
help ode 113

Tambin se incluyen ejemplos preparados por Matlab


odeexamples('ode')

23

Resolucin mediante dsolve

24

Mtodo dsolve
Aunque Matlab trabaja principalmente con mtodos
numricos, tambin puede resolver ecuaciones
diferenciales de forma simblica.
Para obtener la solucin general se aplica el comando:
1.
2.

dsolve('ecuacion')
dsolve('ecuacion','var')

Por defecto la variable independiente es t


Se puede especificar otra variable asignndola al parmetro
var
25

Mtodo dsolve
Para obtener la solucin particular para una condicin en

especfico, se escribe de la forma:


3.
4.

dsolve('ecuacion','condicion inicial')
dsolve('ecuacion','condicion inicial','var')

Se utiliza la letra D para indicar diferenciacin.


Si la letra D es seguida de un dgito, representa el orden de la
derivada.

26

Ejemplo 6: dsolve
Resolver la ecuacin diferencial:
Se escribe en Matlab:

dy
y
dt

y=dsolve('Dy=y')

El programa entrega la solucin:

y = C1*exp(t)

Para expresarla como variable de x: dy y


dx
Se escribe en Matlab:

y=dsolve('Dy=y', 'x')

El programa entrega la solucin:

y = C2*exp(x)
27

Ejemplo 6: dsolve
Si se desea una solucin particular para la condicin inicial
dada:
dy
y ; y (0) 1
dx
Se escribe en Matlab:

y=dsolve('Dy=y', 'y(0)=1', 'x')

El programa entrega la solucin:

y = exp(x)

28

Ejemplo 7: Ecuacin de orden superior


Resolver la ecuacin diferencial:
y( x) 4 y( x) 4 y ( x) x ; y (0) 0 ; y (0) 1
Se escribe en Matlab (por pasos):

eqn2 = 'D2y + 4*Dy + 4*y = x


inits2='y(0)=0, Dy(0)=1
y=dsolve(eqn2,inits2,'x')
El programa entrega la solucin:

y = x/4 + 1/(4*exp(2*x)) + (5*x)/(4*exp(2*x)) - 1/4


29

Ejemplo 8: Sistemas de ecuaciones


Resolver el
siguiente sistema:

x(t ) x(t ) 2 y (t ) z (t )
y(t ) x(t ) z (t )
z (t ) 4 x(t ) 4 y (t ) 5 z (t )

Se escriben las 3 ecuaciones separadas por comas:


[x,y,z]=dsolve('Dx=x+2*y-z','Dy=x+z','Dz=4*x-4*y+5*z')

Las soluciones son:


x = - (C1*exp(t))/2 - (C2*exp(2*t))/2 - (C3*exp(3*t))/4
y =(C1*exp(t))/2 + (C2*exp(2*t))/4 + (C3*exp(3*t))/4
z =C1*exp(t) + C2*exp(2*t) + C3*exp(3*t)

30

Ejemplo 8: Sistemas de ecuaciones


Si se desea ingresar condiciones iniciales:
x(0) 1, y (0) 2, z (0) 3
Se ingresa en Matlab:

inits='x(0)=1,y(0)=2,z(0)=3'

[x,y,z]=dsolve('Dx=x+2*y-z','Dy=x+z','Dz=4*x-4*y+5*z',inits)

Las soluciones particulares son:


x = 6*exp(2*t) - (5*exp(3*t))/2 - (5*exp(t))/2
y = (5*exp(3*t))/2 - 3*exp(2*t) + (5*exp(t))/2
z = 10*exp(3*t) - 12*exp(2*t) + 5*exp(t)

31

Ejemplo 9: Graficar las soluciones


El comando dsolve entrega como resultado elementos
simblicos, por lo que no se pueden extraer ni graficar
directamente.
Se puede convertir los elementos simblicos a numricos
utilizando los comandos eval y vectorize:
Vectorize convierte el elemento simblico en una cadena de
caracteres.
Eval evala el elemento en puntos definidos.
Tambin es necesario establecer un vector para la variable
independiente.

32

Ejemplo 9: Graficar las soluciones


Para el ejemplo anterior la solucin fue:
x = 6*exp(2*t) - (5*exp(3*t))/2 - (5*exp(t))/2
y = (5*exp(3*t))/2 - 3*exp(2*t) + (5*exp(t))/2
z = 10*exp(3*t) - 12*exp(2*t) + 5*exp(t)
Definimos el vector t que representa la variable independiente y los
vectores xx, yy, zz que representan las soluciones x, y, z.

Entonces se escribe en Matlab:


t=0:0.00025:0.5;
xx=eval(vectorize(x));
yy=eval(vectorize(y));
zz=eval(vectorize(z));
plot(t, xx, t, yy, t, zz)

33

Ejemplo 9: Graficar las soluciones


Graficando:

plot(t, xx, t, yy, t, zz)

34

Ejemplo 10: Comparacin con Ej. 1


Resolver ecuacin:
dy
ty, y(1) 2, en intervalo t [1,3]
dt
Se plantea en Matlab:
[y]=dsolve('Dy=t*y', 'y(1)=2', 't')
La solucin entregada es:
y = (2*exp(t^2/2))/exp(1)^(1/2)

35

Ejemplo 10: Comparacin con Ej. 1


Graficando la solucin:

Posee el mismo resultado.

t=1:0.001:3;
yy=eval(vectorize(y));
plot(t, yy)

36

You might also like