1. UNIVERSIDAD
PRIVADA DEL NORTE
N
Anexos 8.
1. Ecuaciones diferenciales ordinarias.
Las ecuaciones diferenciales juegan un papel esencial en las disciplinas cientı́ficas y técni-
cas, ya que la mayorı́a de los fenómenos fı́sicos se pueden modelar utilizando este tipo de ecua-
ciones. Sólo un número limitado de ecuaciones diferenciales pueden resolverse analı́ticamnte. Los
métodos numéricos, por otro lado, pueden dar una solución aproximada de la mayorı́a de estas
ecuaciones. Sin embargo, obtener una solución numérica no es una tarea sencilla, ya que no exis-
te un método numérico general que pueda resolver todas las ecuaciones diferenciales existentes.
MatLab posee una librerı́a con un gran número de herramientas que pueden ser utilizadas para
la solución de ecuaciones diferenciales. Para poder sacar el máximo provecho a estas herramien-
tas, el usuario debe saber trabajar con ecuaciones diferenciales, ası́ como estar familiarizado con
los métodos apropiados para poder resolverlas.
En esta sección se describe en detalle cómo se utiliza MatLab para resolver ecuaciones
diferenciales ordinarias de primer orden. Se describirán los métodos numéricos utilizados para
resolver este tipo de ecuaciones, aunque estos no se explicarán desde el punto de vista matemáti-
co. Esta sección proporciona información para resolver ecuaciones de primer orden no demasiado
problemáticas. Estos métodos proporcionan la pauta para resolver ecuaciones de orden superior
y sistemas de ecuaciones más completos.
Una ecuación diferencial ordinaria (ODE: del inglés Ordinary Differential Equation) es una
ecuación que contiene una variable independiente, una variable dependiente, ası́ como derivadas
de la variable dependiente. Las ecuaciones que se tratarán en esta sección son ecuaciones de
primer orden, cuya forma es:
dy
dx
= f (x, y)
donde x e y representan la variable independiente y dependiente, respectivamente. La solución
es una función y = f (x) que satisface la ecuación. En general, existen muchas funciones que
dan solución a una determinada ODE, por lo que se necesita más información para calcular la
solución a un problema especı́fico. Esta información adicional es el valor de la función (variable
dependiente) para ciertos valores de la variable independiente.
Facultad de Ingeniería Departamento de Ciencias
1
2. UNIVERSIDAD
PRIVADA DEL NORTE
N
1.1. Pasos en la resolución de una ODE simple de primer orden:
De aquı́ en adelante se considerará t (el tiempo) como variable independiente. La razón es que en
muchas aplicaciones el tiempo es casi siempre la variable independiente, ası́ además la explicación
será coherente con la ayuda que proporciona MatLab en el menú Help (Ayuda).
1.1.1. Paso 1: Escribir el problema en la forma estándar.
Esto es, escribir la ecuación en la forma:
dy
dt
= f (t, y) para t0 ≤ t ≤ tf , con y = y0 en t = t0
Como se puede observar, para resolver una ODE de primer orden es necesario conocer tres cosas
importantes: una ecuación que da la expresión para la derivada de y con respecto a t, el intervalo
de la variable independiente y el valor inicial de y. La solución es el valor de y en función de t,
entre t0 y tf .
He aquı́ un problema de ejemplo:
dy
dt
=
t3 − 2y
t
para 1 ≤ t ≤ 3, con y = 4,2 en t = 1
1.1.2. Paso 2: Crear un fichero de función.
Crear una función (en un fichero) que calcule dy
dt para los valores dados de t e y. Para el problema
anterior, el fichero de función serı́a el siguiente:
function dydt = ODEexp1(t,y)
dydt = (t^3-2*y)/t;
1.1.3. Paso 3: Seleccionar un método para hallar la solución.
Se trata de seleccionar el método para el cálculo de la solución. Hasta la fecha se han desarrollado
multitud de métodos para calcular ODEs de primer orden. Tı́picamente, en estos métodos el
intervalo de tiempo se divide en pequeños subintervalos o pasos. La solución comienza en el
Facultad de Ingeniería Departamento de Ciencias
2
3. UNIVERSIDAD
PRIVADA DEL NORTE
N
punto conocido y0. Seguidamente, utilizando uno de los métodos de integración, se calcula el
valor de y en cada paso. En la Tabla 1 se listan siete métodos distintos para resolver ODEs de
primer orden, implementados en MatLab mediante funciones. En la tabla se detalla además una
breve descripción de cada método.
TABLA 1. Funciones MatLab para la resolución de ODEs
Nombre de la función Descripción
ode45 Para ecuaciones no demasiado complejas.Obtiene la solución en un
solo paso, ideal para intentar obtener una primera aproximación.
Se basa en el método de Runge-Kutta.
ode23 Para ecuaciones no demasiado complejas. Es más rápido pero
menos preciso que el método ode45.
ode113 Para ecuaciones no demasiado complejas. Obtiene la solución en
múltiples pasos.
ode15s Para ecuaciones complejas. Obtiene la solución en varios pasos.
Se utiliza cuando ode45 falla.
ode23s Para ecuaciones complejas. Obtiene la solución en un solo paso.
Permite resolver algunas ecuaciones que no puede resolver ode15s.
ode23t Para ecuaciones de dificultad media.
ode23tb Para ecuaciones complejas. A veces más eficiente que ode15s.
En general, los métodos de cálculo de ODEs se pueden dividir en dos grupos según su
habilidad para resolver problemas fáciles o difı́ciles, y también en función de si se usan uno
o varios pasos para la resolución de la ecuación. Las ecuaciones más difı́ciles son aquellas que
incluyen componentes que varı́an de forma rápida y lenta, y requieren pequeños subintervalos de
tiempo para obtener la solución. Los métodos que calculan la solución en un solo paso necesitan
necesitan la información de un punto para obtener una solución próxima al punto en cuentión.
Los métodos planificados en varios pasos utilizan información de varios puntos previos para
encontrar la solución en el punto siguiente.
Es necesario conocer de antemano qué método es el más apropiado para un problema
especı́fico. Para hacer esto se puede utilizar, como primera opción, el método ode45. Este método
da, por lo general, buenos resultados para la mayorı́a de los problemas. Si no se obtiene ninguna
solución adecuada debido a la dificultad de la ecuación, se puede utilizar, por ejemplo, el método
ode15s.
Facultad de Ingeniería Departamento de Ciencias
3
4. UNIVERSIDAD
PRIVADA DEL NORTE
N
1.1.4. Paso 4: Resolución de la ODE.
El formato del comando que se utiliza para resolver ODEs para valores concretos es el mismo
para todos los métodos vistos anteriormente. La sintaxis general es:
[t, y] = nombre metodo ′
funcODE′
, tspan, y0
Información adicional:
nombre metodo - Es el nombre del método (numérico) usado (por ejemplo: ode45, ode23s, etc.)
’funcODE’ - Es el nombre, en forma de cadena, de la función (fichero de función) que calcula
dy
dt para valores dados de t e y.
tspan Es un vector que especifica el intervalo de la solución. El vector debe tener almenos dos
elementos, pero puede tener más. Si el vector tiene sólo dos elementos, los elementos deben ser
[t0, tf], que son el punto inicial y final, respectivamente, del intervalo de la solución. Sin embar-
go, el vector tspan puede tener puntos adicionales entre el primero y el último. El número de
elementos de tspan afecta a la salida del comando.
y0 - Es el valor inicial de y (valor de y en el primer punto del intervalo).
[t, y] - Es la salida del comando, es decir, la solución a la ecuación diferencial. Los valores t e
y son vectores columna. Los puntos primero y último representan el punto inicial y final del
intervalo, respectivamente. El espaciado y el número de puntos dependen del vector de entrada
tspan. Si tspan tiene dos elementos (puntos inicial y final), los vectores t e y contendrán la
solución en cada paso de integración calculado por el método en cuestión. Por el contrario, si
tspan tiene más de dos puntos (puntos adicionales entre el inicial y el final), los vectores t e
y sólo contendrán la solución para esos puntos. El número de puntos en tspan no afecta a los
pasos (subintervalos de tiempo) utilizados para la solución de la ecuación.
Por ejemplo, la solución al problema presentado en el Paso 1:
dy
dt
=
t3 − 2y
t
para 1 ≤ t ≤ 3, con y = 4,2 en t = 1
se puede obtener de la forma:
[t,y]=ode45(’ODEexp1’,[1:0.5:3],4.2)
t =
Facultad de Ingeniería Departamento de Ciencias
4
5. UNIVERSIDAD
PRIVADA DEL NORTE
N
1.0000
1.5000
2.0000
2.5000
3.0000
y =
4.2000
2.4528
2.6000
3.7650
5.8444
Esta solución se ha calculado mediante el método ode45. El nombre de la función utilizada (la
del Paso 2) es ′ODEexp1′. La solución coemienza en t = 1 y finaliza en t = 3, con incrementos
de 0,5 (según el vector tspan). Para visualizar la solución, el problema se resuelve de nuevo
utilizando tspan con un espaciado menor. Esta solución se representa gráficamente mediante el
comando plot.
[t,y]=ode45(’ODEexp1’,[1:0.01:3],4.2);
plot(t,y)
xlabel(’t’), ylabel(’y’)
1 1.5 2 2.5 3
2
2.5
3
3.5
4
4.5
5
5.5
6
t
y
Facultad de Ingeniería Departamento de Ciencias
5
6. UNIVERSIDAD
PRIVADA DEL NORTE
N
1.2. Programas diversos
function E=euler(f,a,b,ya,M)
%Método de Euler. Construcción de las aproximaciones a la solución del
%problema inicial y’=f(t,y) con y(a)=y0 en [a,b] dadas por
%
% y(k+1)=y(k)+h*f(t(k),y(k)) para k=0,1,...,M-1.
%
% Datos
% - f es la función almacenada como una cadena de caracteres ’f’.
% - a y b son los extremos derecho e izquierdo del intervalo.
% - ya es la condición inicial y(a).
% - M es el número de pasos.
% Resultado
% - E=[T’ Y’] siendo T el vector de las abscisas e Y el vector de
% las ordenadas.
h=(b-a)/M;
T=zeros(1,M+1);
Y=zeros(1,M+1);
T=a:h:b;
Y(1)=ya;
for j=1:M
Y(j+1)=Y(j)+h*feval(f,T(j),Y(j));
end
E=[T’ Y’];
plot(E(:,1),E(:,2))
function H=heun(f,a,b,ya,M)
%Datos
% - f es la función almacenada como una cadena de caracteres ’f’.
% - a y b son los extremos derecho e izquierdo del intervalo.
% - ya es la condición inicial y(a).
% - M es el número de pasos.
%Resultado
% - H=[T’ Y’] siendo T el vector de las abscisas e Y el vector de
% las ordenadas.
h=(b-a)/M;
Facultad de Ingeniería Departamento de Ciencias
6
7. UNIVERSIDAD
PRIVADA DEL NORTE
N
T=zeros(1,M+1);
Y=zeros(1,M+1);
T=a:h:b;
Y(1)=ya;
for j=1:M
k1=feval(f,T(j),Y(j));
k2=feval(f,T(j+1),Y(j)+h*k1);
Y(j+1)=Y(j)+(h/2)*(k1+k2);
end
H=[T’ Y’];
plot(H(:,1),H(:,2))
− ⊙ −
function z=df(t,y)
z = [(t-y)/2,(2-t+y)/4,(-2+t-y)/8,(2-t+y)/16];
function T4=taylor(df,a,b,ya,M)
%Datos
% - df=[y’ y’’ y’’’ y’’’’] almacanada como una cadena de caracteres
% - ’df’, siendo y’=f(t,y).
% - a y b son los extremos derecho e izquierdo del intervalo.
% - ya es la condición inicial.
% - M es el número de pasos.
%Resultado
% - T4=[T’ Y’] siendo T el vector de las abscisas e Y el vector de
% las ordenadas.
h=(b-a)/M;
T=zeros(1,M+1);
Y=zeros(1,M+1);
T=a:h:b;
Y(1)=ya;
for j=1:M
D=feval(df,T(j),Y(j));
Y(j+1)=Y(j)+h*(D(1)+h*(D(2)/2+h*(D(3)/6+h*D(4)/24)));
end
T4=[T’ Y’];
plot(T4(:,1),T4(:,2))
Facultad de Ingeniería Departamento de Ciencias
7
8. UNIVERSIDAD
PRIVADA DEL NORTE
N
function R=rk4(f,a,b,ya,M)
%Aproximación a la solución del problema de valor inicial y’=f(t,y) con
%y(a)=y0 en [a,b] usando la fórmula:
%
% y(k+1)=y(k)+h/6*(k1+2k2+2k3+k4).
%
%Datos
% - f es la función almacenada como una cadena de caracteres ’f’.
% - a y b son los extremos derecho e izquierdo del intervalo.
% - ya es la condición inicial y(a).
% - M es el número de pasos.
%Resultado
% - R=[T’ Y’] siendo T el vector de las abscisas e Y el vector de
% las ordenadas.
h=(b-a)/M;
T=zeros(1,M+1);
Y=zeros(1,M+1);
T=a:h:b;
Y(1)=ya;
for j=1:M
k1=h*feval(f,T(j),Y(j));
k2=h*feval(f,T(j)+h/2,Y(j)+k1/2);
k3=h*feval(f,T(j)+h/2,Y(j)+k2/2);
k4=h*feval(f,T(j)+h,Y(j)+k3);
Y(j+1)=Y(j)+(k1+2*k2+2*k3+k4)/6;
end
R=[T’ Y’];
plot(R(:,1),R(:,2));
function Z=F1(t,Z)
x=Z(1); y=Z(2); Z=[y,2*t*y/(1+t^2)-2*x/(1+t^2)+1];
function [T,Z]=rks4(F,a,b,Za,M)
%Datos
% - F es la función, almacenada como una cadena de caracteres ’F’.
% - a y b son los extremos derecho e izquierdo del intervalo.
Facultad de Ingeniería Departamento de Ciencias
8
9. UNIVERSIDAD
PRIVADA DEL NORTE
N
% - Za=[x1(a)...xn(a)]; es la condición inicial.
% - M es el número de pasos.
%Resultados
% - T el vector de los nodos.
% - Z=[x1(t)...xn(t)]; donde xk(t) es la aproximación a la k-ésima
% variable dependiente.
h=(b-a)/M;
T=zeros(1,M+1);
Z=zeros(M+1,length(Za));
T=a:h:b;
Z(1,:)=Za;
for j=1:M
k1=h*feval(F,T(j),Z(j,:));
k2=h*feval(F,T(j)+h/2,Z(j,:)+k1/2);
k3=h*feval(F,T(j)+h/2,Z(j,:)+k2/2);
k4=h*feval(F,T(j)+h,Z(j,:)+k3);
Z(j+1,:)=Z(j,:)+(k1+2*k2+2*k3+k4)/6;
end
function Z=F2(t,Z)
x=Z(1); y=Z(2); Z=[y,2*t*y/(1+t^2)-2*x/(1+t^2)];
function L=linsht(F1,F2,a,b,alpha,beta,M)
%Datos
% - F1 y F2 son los sistemas de ecuaciones de primer orden
% que representan los problemas de valor inicial:
% u’’=p(t)u’(t)+q(t)u(t)+r(t) con u(a)=alpha y u’(a)=0
% v’’=p(t)v’(t)+q(t)v(t) con v(a)=0 y v’(a)=1
% almacenados como cadenas de caracteres ’F1’ y ’F2’.
% - a y b son los extremos derecho e izquierdo del intervalo.
% - alpha = x(a) y beta = x(b) son las condiciones de contorno.
% - M es el número de pasos.
%Resultado
% - L=[T’ X]; siendo T’ el vector de dimensión (M+1)x1 de las abscisas y
% y X el vector de dimensión (M+1)x1 de las ordenadas.
Facultad de Ingeniería Departamento de Ciencias
9
10. UNIVERSIDAD
PRIVADA DEL NORTE
N
%Resolución del sistema F1
Za=[alpha,0];
[T,Z]=rks4(F1,a,b,Za,M);
U=Z(:,1);
%Resolución del sistema F2
Za=[0,1];
[T,Z]=rks4(F2,a,b,Za,M);
V=Z(:,1);
%Cálculo de la solución del problema de contorno
X=U+(beta-U(M*1))*V/V(M+1);
L=[T’ X];
plot(L(:,1),L(:,2))
Facultad de Ingeniería Departamento de Ciencias
10