Vous êtes sur la page 1sur 32

METODOS NUMERICOS

UNIDAD 6 SOLUCION NUMÉRICA DE ECUACIONES DIFERENCIALES


ORDINARIAS

Una ecuación diferencial es una ecuación en la que intervienen derivadas de una


o más funciones. Dependiendo del número de variables independientes respecto
de las que se deriva, las ecuaciones diferenciales se dividen en:

• Ecuaciones diferenciales ordinarias: aquellas que contienen derivadas


respecto a una sola variable independiente.
• Ecuaciones en derivadas parciales: aquellas que contienen derivadas
respecto a dos o más variables.

Las ecuaciones diferenciales aparecen naturalmente al modelar situaciones físicas


en las ciencias naturales, ingeniería, y otras disciplinas, donde hay envueltas
razones de cambio de una ó varias funciones desconocidas con respecto a una ó
varias variables independientes. Estos modelos varían entre los más sencillos que
envuelven una sola ecuación diferencial para una función desconocida, hasta
otros más complejos que envuelven sistemas de ecuaciones diferenciales
acopladas para varias funciones desconocidas. Por ejemplo, la ley de enfriamiento
de Newton y las leyes mecánicas que rigen el movimiento de los cuerpos, al
ponerse en términos matemáticos dan lugar a ecuaciones diferenciales.
Usualmente estas ecuaciones están acompañadas de una condición adicional que
especifica el estado del sistema en un tiempo o posición inicial. Esto se conoce
como la condición inicial y junto con la ecuación diferencial forman lo que se
conoce como el problema de valor inicial. Por lo general, la solución exacta de un
problema de valor inicial es imposible ó difícil de obtener en forma analítica. Por tal
razón los métodos numéricos se utilizan para aproximar dichas soluciones.

Las leyes que gobiernan los fenómenos de la naturaleza se expresan


habitualmente en forma de ecuaciones diferenciales. Las ecuaciones del
movimiento de los cuerpos (la segunda ley de Newton) es una ecuación diferencial
de segundo orden, como lo es la ecuación que describe los sistemas oscilantes, la
propagación de las ondas, la transmisión del calor, la difusión, el movimiento de
partículas subatómicas, etc.

Pocas ecuaciones diferenciales tienen una solución analítica sencilla, la mayor


parte de las veces es necesario realizar aproximaciones, estudiar el


 
comportamiento del sistema bajo ciertas condiciones. Así, en un sistema tan
simple como un péndulo, la amplitud de la oscilación ha de ser pequeña y el
rozamiento ha de ser despreciable, para obtener una solución sencilla que
describa aproximadamente su movimiento periódico.

Se estudia el procedimiento de Runge-Kutta que se aplica de forma directa a una


ecuación diferencial de primer orden, pero veremos cómo se extiende a un
sistema de ecuaciones de primer orden, a un ecuación diferencial de segundo
orden y a un sistema de ecuaciones diferenciales de segundo orden.

El procedimiento de Runge-Kutta se puede programar fácilmente en los


ordenadores y además, se emplea mucho en la práctica, debido a la su exactitud
relativamente elevada de la solución aproximada de la ecuación diferencial.

6.1 Metodos de Euler y Euler modificado.

Método de EULER

En matemática y computación, el método de Euler, llamado así en honor de


Leonhard Euler, es un procedimiento de integración numérica para resolver
ecuaciones diferenciales ordinarias a partir de un valor inicial dado.

El método de Euler es el más simple de los métodos numéricos, resuelve un


problema del tipo siguiente:

Método de 4 pasos para resolver ecuaciones diferenciales de primer orden con


valores iniciales mediante el método de EULER.

Fórmulas usadas:
yi+1 = yi + h f(xi,yi) xi+1 = xi + h
Donde:
i=0, 1, 2, 3,…
h = tamaño del incremento con x
f(xi,yi) = segundo miembro de la ED de primer orden cuando tiene la forma:
dy/dx = f(x,y)


 
Esta fórmula es conocida como el método de Euler (punto medio). Se predice un
nuevo valor de Y por medio de la pendiente (igual a la primera derivada en el valor

original de X).

Pasos:

i. Escribimos la ED en la forma: dy/dx = f(x,y), para extraer su segundo


miembro
ii. Definimos x0, y0 y h de acuerdo a los datos del problema.
iii. Plateamos la ecuación de Euler utilizando los datos iniciales, como
sigue:
y0+1=y0+h f(x0,y0)
Y una vez obtenido este primer resultado repetimos el proceso
iterativamente utilizando los nuevos datos:
y1+1=y1+h f(x1,y1)
iv. Desarrollamos hasta el valor buscado en x.

Ejercicio: use el método de EULER para obtener una aproximación a cuatro


decimales del valor indicado, ejecute a mano la ecuación de recursión
yn+1=yn+h f(xn,yn), usando h=0.1
y′=2x–3y+1, y(1)=5, aproximar y(1.2)
Pasos:
i. Escribimos la ED en la forma: dy/dx=f(x,y), para extraer su segundo
miembro
dy/dx = f(x,y) = 2x–3y+1
ii. Definimos x0, y0 y h de acuerdo a los datos del problema
x0=1,


 
y0=5
h=0.1
iii. Planteamos la ecuación de Euler utilizando los datos iniciales:
y0+1 = y0 + h f(x0,y0)
y1 = y0 + h (2x0–3y0+1)
y1 = 5+(0.1)(2(1)–3(5)+1)
iv. Desarrollamos hasta el valor buscado en x, en este caso: x=1.2 (límite
superior del intervalo).
x1 = x0 + h = 1 + 0.1 = 1.1
y1 = 5+(0.1)(2–15+1)
y1 = 5+(0.1)(–12)
y1 = y(1.1) = 3.8000

x2 = x1 + h = 1.1 + 0.1 = 1.2


y1+1 = y1 + h f(x1,y1)
y2 = y1 + h*(2x1–3y1+1)
y2 = 3.8 + (0.1)*(2*1.1-3*3.8+1)
y2 = y(1.2) = 2.9800
Nota . El hecho de que la x varíe en x0=1, x1=1.1, x2=1.2, etc, tras cada iteración
es porque la x aumenta según la fórmula: xn+1=xn + h.

Ejercicio: Dada la siguiente ecuación diferencial con la condición inicial:


y’=2xy, y(0) =1, aproximar y(0.5).

NOTA: Primero observamos que esta ecuación sí puede resolverse por métodos
tradicionales de ecuaciones diferenciales. Por ejemplo, podemos aplicar el método
de separación de variables. Veamos las dos soluciones.

Solución Analítica:

dy/dx = 2x y dy/y = 2 x dx ᶴdy/y = ᶴ2 x dx lnlyl = x2 + c

Sustituyendo la condición inicial: X=0, y=1 ln(1) = 02+c


Por lo tanto, tenemos que la curva solución real está dada:
ln(y)=x2 y=exp(x2) y(0.5) = exp(0.52) = 1.28403

Solución Numérica:

Aplicamos el método de Euler y para ello, observamos que la distancia entre x0=0
y x1=0.5 no es lo suficientemente pequeña. Si dividimos esta distancia entre cinco


 
obtenemos un valor de h=0.1 y por lo tanto, obtendremos la aproximación
deseada en cinco pasos.
De esta forma, tenemos los siguientes datos:
x0=0
y0=1
h=0.1
f(x,y)=2xy
Sustituyendo estos datos en la fórmula de Euler, tenemos, en un primer paso:
x1 = x0+h = 0.1
y1 = y0+h f(x0,y0) = 1+0.1*(2*0*1) = 1

Aplicando nuevamente la fórmula de Euler, tenemos, en un segundo paso:


x2 = x1+h = 0.2
y2 = y1+h f(x1,y1) = 1+0.1*(2*0.1*1) = 1.02

Y así sucesivamente hasta obtener y5. Resumimos los resultados en la siguiente


tabla:

n xn yn
0 0 1
1 0.1 1
2 0.2 1.02
3 0.3 1.0608
4 0.4 1.12445
5 0.5 1.2144

Concluimos que el valor aproximado, usando el método de Euler es:


y(0.5) = 1.2144

Puesto que en este caso, conocemos el valor verdadero, podemos usarlo para
calcular el error relativo porcentual que se cometió al aplicar la fórmula de Euler.
Tenemos que:
lϵvl = abs((1.28402 – 1.2144)/1.28402)*100% = 5.42%

Método de Euler mejorado

Este método se basa en la misma idea del método anterior, pero hace un
refinamiento en la aproximación, tomando un promedio entre ciertas pendientes.
La fórmula es la siguiente:


 
Donde

Para entender esta fórmula, analicemos el primer paso de la aproximación, con


base en la siguiente gráfica:

En la gráfica, vemos que la pendiente promedio corresponde a la pendiente de


la recta bisectriz de la recta tangente a la curva en el punto de la condición inicial y
la "recta tangente" a la curva en el punto donde es la aproximación
obtenida con la primera fórmula de Euler. Finalmente, esta recta bisectriz se
traslada paralelamente hasta el punto de la condición inicial, y se considera el
valor de esta recta en el punto como la aproximación de Euler mejorada.

Ejercicio: Dada la siguiente ecuación diferencial con la condición inicial:


y’=2xy, y(0) =1, aproximar.

Ejercicio: Aplicar el método de Euler mejorado, para aproximar y(0.5) si:


y’=2xy, y(0) =1

Solución:

Vemos que este es el mismo ejercicio del método anterior. Así que definimos
h=0.1 y encontraremos la aproximación después de cinco iteraciones. A diferencia
del método de Euler 1, en cada iteración requerimos de dos cálculos en vez de
uno solo: el de yn* primero y posteriormente el de yn.
Para aclarar el método veamos con detalle las primeras dos iteraciones. Primero
que nada, aclaramos que tenemos los siguientes datos iniciales:

 
x0=0
y0=1
h=0.1
f(x,y)=2xy

En nuestra primera iteración tenemos:


x1 = x0+h = 0.1
y1* = y0+h f(x0,y0) = 1+0.1*(2*0*1) = 1
y1 = y0+h ((f(x0,y0)+f(x1,y1*))/2) = 1.01

Nótese que el valor de y1* coincide con el y1 (Euler 1), y es el único valor que va a
coincidir, pues para calcular y2* se usará y1 y no y1*

Esto lo veremos claramente en la siguiente iteración:


x2 = x1+h = 0.1+0.1 = 0.2
y2* = y1+h f(x1,y1) = = 1.0302
y2 = y1+h ((f(x1,y1)+f(x2,y2*))/2) = 1.040704

Nótese que ya no coinciden los valores de y2 (Euler 1) y el de y2*. El proceso debe


seguirse hasta la quinta iteración. Resumimos los resultados en la tabla siguiente:

n xn yn
0 0 1
1 0.1 1.01
2 0.2 1.040704
3 0.3 1.093988
4 0.4 1.173192
5 0.5 1.28336

Se concluye entonces que la aproximación obtenida con el método de Euler


mejorado es: y(0.5) = 1.28336
Con fines de comparación, calculamos el error relativo verdadero:

lϵvl = abs((1.28402 – 1.28336)/1.28402)*100% = 0.05%

Vemos que efectivamente se ha obtenido una mejor aproximación con este


método, reduciendo el error relativo verdadero de un 5.4% hasta un 0.05%. En
nuestro tercer método veremos cómo se reduce aún más este error prácticamente
a un 0%!


 
6.2 Método de Runge Kutta de cuarto orden

Los métodos de Taylor tienen la propiedad de un error local de truncamiento de


orden superior, pero la desventaja de requerir el cálculo y la evaluación de las
derivadas de f(t,y). Esto resulta algo lento y complicado, en la mayoría de los
problemas, razón por la cual, en la práctica casi no se utilizan. El método de Euler,
lamentablemente requiere de un paso muy pequeño para una precisión razonable.

Los métodos de Runge kutta tienen el error local de truncamiento del mismo orden
que los métodos de Taylor, pero prescinden del cálculo y evaluación de las
derivadas de la función f(t,y).

Se presenta de nuevo el problema de valor inicial cuya solución se intenta


aproximar:

Como en los métodos anteriores, se determina primero la malla {t0,t1,...,tN} de paso


h, donde t0 = a y tN = b. En estos puntos es donde se va a obtener la aproximación
de la solución.

En esencia, los métodos de Runge-Kutta son generalizaciones de la fórmula


básica de Euler yi+1 = yi + h f(ti, yi) en los que el valor de la función f se
reemplaza por un promedio ponderado de valores de f en el intervalo ti≤t≤ti+1, es
decir,

En esta expresión las ponderaciones wi, i = 1,...,m son constantes para las que en
general se pide que su suma sea igual a 1, es decir, w1+w2+...+wm = 1, y cada kj
es la función f evaluada en un punto seleccionado (t,y) para el cual ti≤t≤ti+1. Se
mostrará que los kj se definen en forma recursiva.

Se define como orden del método al número m, es decir, a la cantidad de términos


que se usan en el promedio ponderado.


 
Runge-Kutta de primer orden.

Si m = 1, entonces se toma w1 = 1 y la fórmula resulta

Igualando esta fórmula al desarrollo de Taylor de orden 1 de la función y(t),


alrededor del punto ti, y calculado en el punto ti+1:

y teniendo en cuenta que yi=y(ti), resulta k1= f(ti,yi), obteniendo así la fórmula de
Euler yi+1 = yi + h f(ti,yi). Por lo tanto, se dice también que el método de Euler es
un método de Runge Kutta de primer orden.

Runge-Kutta de segundo orden.

Ahora se plantea, con m = 2, una fórmula del tipo:

Donde

y las constantes a, b, se deben determinar, de manera que la expresión coincida


con el desarrollo de Taylor de y de orden más alto posible.

Para ello, utilizando un desarrollo de Taylor para funciones de dos variables,


tenemos que:

donde el subíndice i indica que todas las derivadas están evaluadas en el punto
(ti,yi).
Reemplazando k1 y teniendo en cuenta la expresión de k2, tenemos que:

Agrupando los términos de por las potencias de h, y reemplazando el valor de k1 y


k2, resulta

Reacomodando términos, resulta:


 
Por otro lado, se hace un desarrollo de Taylor de orden 3 de la función y(t),
calculado en el punto ti+1, obteniendo:

Aplicando regla de la cadena para las derivadas de f, se tiene:

Comparando las expresiones e igualando los coeficientes de h y h2, se tiene:

Sucede que se tienen cuatro incógnitas, pero tres ecuaciones, con lo que queda
un grado de libertad en la solución del sistema. Se trata de usar este grado de
libertad para hacer que los coeficientes de h3 en las expresiones coincidan. Esto
obviamente no se logra para cualquier f.

Hay muchas soluciones para el sistema, una de ellas es

obteniendo así la siguiente fórmula, del método de Runge Kutta de orden 2:

para i desde 0 hasta N-1, tomando un mallado {ti, i = 0,..,N}.


Este método tiene un error local de O(h3), y global de O(h2).
Mejora entonces el método de Euler, por lo que se espera poder usar con este
método un paso mayor. El precio que debe pagarse en este caso, es el de evaluar
dos veces la función en cada iteración.

De la misma manera que se realizó arriba, se pueden derivar fórmulas de Runge-


Kutta de cualquier orden, pero estas deducciones resultan excesivamente
complicadas. Una de las más populares, y más utilizada por su alta precisión, es la
de orden 4, que se presenta a continuación.

10 
 
Runge-Kutta de cuarto orden.

Si ahora m = 4, se obtiene, con un desarrollo del tipo del anterior, la siguiente


fórmula, para i desde 0 hasta N-1:

Si bien con facilidad se pueden deducir otras fórmulas, el algoritmo expresado


arriba se denomina método de Runge-Kutta de cuarto orden, o método clásico de
Runge-Kutta, abreviado como RK4. Este algoritmo es de uso extendido, y
reconocido como una valiosa herramienta de cálculo, por la buena aproximación
que produce.

Esta fórmula tiene un error de truncamiento local de O(h5), y un error global de


O(h4). De nuevo, el precio que se debe pagar por la mejora en el error, es una
mayor cantidad de evaluaciones de la función, resultando en un mayor tiempo de
cálculo si la función es complicada. Tiene la ventaja, sobre el método de Taylor de
orden 4 (cuyo error global es también O(h4), que no requiere el cálculo de las
derivadas de f.

Implementación del método RK4.

Se presenta a continuación el pseudocódigo del método RK4, para ser


implementado en cualquier lenguaje de programación, o software simbólico.

11 
 
Ejercicio: Con el método RK4, obtener una aproximación del valor de y(1.5) para
el siguiente problema de valor inicial, tomando un paso h = 0.1.

El primer paso para resolver este problema es determinar la malla de puntos en


donde se va a obtener la solución.

h=(xN-x0)/N

Como en este caso h está dado, se tiene que N = (1.5 - 1)/0.1 = 5.

Por lo tanto, los puntos en donde se va a determinar la solución, dados por la


fórmula ti = 1 + 0.1*i, para i =1,2,3,4,5, son:
t1 = 1.1,
t2 = 1.2,
t3 = 1.3,
t4 = 1.4 y
t5 = 1.5

Una vez establecida la malla del problema, tenemos, para i = 0:

Resulta entonces,

y aplicando sucesivamente la fórmula de RK4, para i desde 1 hasta 5, se obtienen


los datos que se muestran en la siguiente tabla, donde además se muestra el valor
de la solución exacta para cada punto de la malla.

12 
 
Al analizar la tabla anterior y comparar los resultados obtenidos con el método
RK4 con los valores reales, se ve por qué es tan difundido este método. En la
próxima tabla se comparan los métodos de Euler y Runge Kutta de orden 4 para el
mismo problema.

6.3 Sistemas de dos ecuaciones y ecuaciones de orden superior.

Sistema de dos ecuaciones diferenciales de primer orden

El procedimiento de Runge-Kutta es igualmente efectivo en la resolución de un


sistema de dos ecuaciones diferenciales de primer orden.

dx/dt = f(t,x,y)

dy/dt = g(t,x,y)

El procedimiento de aplicación del método de Runge-Kutta a cada una de las


ecuaciones diferenciales, con la condición inicial siguiente, en el instante t0
el valor inicial de x es x0
el valor inicial de y es y0

13 
 
se esquematiza en la tabla adjunta. Como vemos además de los cuatro números
k1, k2, k3, k4 para la primera ecuación diferencial precisamos otros cuatro números
l1, l2, l3, l4 para la segunda ecuación diferencial. A partir del valor de x en el
instante t, se determina el valor de x en el instante t+h, y a partir del valor de y en
el instante t se determina el valor de y en el instante t+h mediante las fórmulas de
la última fila de la tabla.

dx/dt = f(t,x,y) dy/dt = g(t,x,y)


k1 = h f(t,x,y) l1 = h g(t,x,y)
k2 = h f(t+½ h, x+½ k1, y+½l1,) l2 = h g(t+½h, x+½k1, y+½l1)
k3 = h f(t+½ h, x+½k2, y+½l2) l3 = h g(t+½h, x+½k2, y+½l2)
k4 = h f(t+h, x+k3, y+l3) l4 = h g(t+h, x+k3,y+l3)
x(t+h) = x(t)+1/6(k1+2k2+2k3+k4) y(t+h) = y(t)+1/6(l1+2l2+2l3+l4)

Nos devuelve los vectores x e y para cada instante que se guarda en el vector t
comprendido entre el instante inicial t0 y el final tf.

function [t,x,y] =rk_2_1(f,g,t0,tf,x0,y0,n)


h=(tf-t0)/n;
t=t0:h:tf;
x=zeros(n+1,1); %reserva memoria para n+1 elementos del
vector x(i)
y=zeros(n+1,1);
x(1)=x0; y(1)=y0;

for i=1:n
k1=h*f(t(i),x(i),y(i));
l1=h*g(t(i),x(i),y(i));
k2=h*f(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
l2=h*g(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
k3=h*f(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
l3=h*g(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
k4=h*f(t(i)+h,x(i)+k3,y(i)+l3);
l4=h*g(t(i)+h,x(i)+k3,y(i)+l3);

x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
y(i+1)=y(i)+(l1+2*l2+2*l3+l4)/6;
end
end
Consideremos una serie radioactiva de tres elementos A-->B-->C en la que, una
sustancia radiactiva A se desintegra y se transforma en otra sustancia radiactiva
B, que a su vez se desintegra y se transforma en una sustancia C estable. Las
ecuaciones diferenciales que gobiernan el proceso y sus soluciones analíticas son,
respectivamente,

14 
 
dx/dt = −ax x = x0 e−at

dy/dt = ax−by y = a/(b−a) x0 (e−at−e−bt)

La solución analítica que aparece a la derecha, se ha obtenido con las condiciones


iniciales t=0, x=x0 e y=0. La segunda solución se obtiene siempre que a sea
distinto de b. En el caso de que a sea igual a b, la solución analítica para y es

y=x0 a e−at

La interpretación del sistema de ecuaciones diferenciales no es complicada. En la


unidad de tiempo, desaparecen ax núcleos de la sustancia A al desintegrarse
(primera ecuación). En la unidad de tiempo, se producen ax núcleos de la
sustancia B y a su vez desaparecen bx núcleos de la sustancia B, que al
desintegrarse se transforman en núcleos de la sustancia C estable (segunda
ecuación).

Escribimos el script radioactivo en el que definiremos las funciones f(t,x,y),


g(t,x,y), las condiciones iniciales y llamaremos a la función rk_2_1

a=input('parámetro a: ');
b=input('parámetro b: ');
x0=input('valor inicial de x: ');
y0=input('valor inicial de y: ');
tf=input('tiempo final, tf: ');
n=input('número de pasos, n: ');
f=@(t,x,y) -a*x;
g=@(t,x,y) a*x-b*y;
%condiciones iniciales
t0=0;

[t,x,y]=rk_2_1(f,g,t0,tf,x0,y0,n);
hold on
plot(t,x,'b')
plot(t,y,'r')
xlabel('t')
ylabel('x,y');
legend('x(t)','y(t)')
title('dx/dt=-ax, dy/dt=ax-by')
hold off

En la ventana de comandos corremos el script radioactivo

15 
 
>> radioactivo
parámetro a: 0.1
parámetro b: .2
valor inicial de x: 100
valor inicial de y: 0
tiempo final, tf: 10
número de pasos, n: 40

Ecuación diferencial de segundo orden

Existen muchas situaciones en las que es necesario resolver una ecuación


diferencial de segundo orden.

d2x/dt2 = f(t,x,v)

con las condiciones iniciales: x(t0) = x0 (dx/dt)t0 = v0

Una ecuación diferencial de segundo orden es equivalente a un sistema de dos


ecuaciones diferenciales de primer orden, por lo que aplicaremos el mismo
esquema.

dx/dt =v dv/dt = f(t,x,v)


k1 = h v l1=h f(t,x,v)
k2 = h (v+½l1) l2=h f(t+½h, x+½k1, v+½l1)
k3 = h (v+½l2) l3=h f(t+½h, x+½k2, v+½l2)
k4 = h (v+l3) l4=h f(t+h, x+k3, v+l3)
x(t+h) = x(t)+1/6 (k1+2k2+2k3+k4) v(t+h) = v(t)+1/6 (l1+2l2+2l3+l4)

16 
 
Definimos la función rk_2 que resuelve la ecuación diferencial de segundo orden,
cuando le pasamos:
• la función f (t,x,v)
• las condiciones iniciales: posición inicial x0 y velocidad inicial v0 en el
instante t0
• el número n de pasos de integración entre t0 y el tiempo final tf

Nos devuelve los vectores de las posiciones x y las velocidades v para cada
instante que se guarda en el vector t comprendido entre el instante inicial t0 y el
final tf.
function [t,x,v] =rk_2(f,t0,tf,x0,v0,n)
h=(tf-t0)/n;
t=t0:h:tf;
x=zeros(n+1,1); %reserva memoria para n+1 elementos del
vector x(i)
v=zeros(n+1,1);
x(1)=x0; v(1)=v0;

for i=1:n
k1=h*v(i);
l1=h*f(t(i),x(i),v(i));
k2=h*(v(i)+l1/2);
l2=h*f(t(i)+h/2,x(i)+k1/2,v(i)+l1/2);
k3=h*(v(i)+l2/2);
l3=h*f(t(i)+h/2,x(i)+k2/2,v(i)+l2/2);
k4=h*(v(i)+l3);
l4=h*f(t(i)+h,x(i)+k3,v(i)+l3);

x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
v(i+1)=v(i)+(l1+2*l2+2*l3+l4)/6;
end
end

La ecuación diferencial que describe un oscilador armónico amortiguado y su


solución para unas condiciones iniciales fijadas es

2
d2x/dt2 + 2‫ ץ‬dx/dt + ω x=0
0

2
ω = √ω − ‫ץ‬2
0

x=e−‫ץ‬t (A sin(ωt)+B cos(ωt))

17 
 
v= dx/dt = − ‫ ץ‬e−‫ץ‬t (A sin(ωt)+B cos(ωt))+ω e−γt (A cos(ωt)−B sin(ωt))

Condiciones iniciales: en el instante t=0, la posición inicial es x0 y la velocidad


inicial v0.

x0 = B
t=0
v0 = − ‫ץ‬B+ωA

x=e−‫ץ‬t ((v0+‫ץ‬x0)/ ω sin(ωt)+x0 cos(ωt))

Escribimos el script oscilador en el que definiremos la función f(t,x,v), las


condiciones iniciales y llamaremos a la función rk_2
w0=input('frecuencia angular w0: ');
g=input('rozamiento, gamma: ');
x0=input('posición inicial, x0: ');
v0=input('velocidad inicial,v0: ');
tf=input('tiempo final, tf: ');
n=input('número de pasos, n: ');
f=@(t,x,v) -2*g*v-w0*w0*x;
%condiciones iniciales
t0=0;
hold on
%solucion numérica
[t,x,v]=rk_2(f,t0,tf,x0,v0,n);
plot(t,x,'b')
%solución analítica
w=sqrt(w0*w0-g*g);
x=((v0+g*x0)*sin(w*t)/w+x0*cos(w*t)).*exp(-g*t);
plot(t,x,'r')
grid on
xlabel('t')
ylabel('x');
legend('aproximado','exacto')
title('oscilador amortiguado')
hold off

En la ventana de comandos corremos el script oscilador con distintas condiciones


iniciales
>> oscilador
frecuencia angular, w0: 2

18 
 
rozamiento, gamma: 0.5
posición inicial, x0: 1.5
velocidad inicial, v0: 0
tiempo final, tf: 8
número de pasos, n: 100

No se aprecia tampoco diferencia entre la solución exacta y la numérica, aplicando


el procedimiento de Runge_Kutta.

6.4 Aplicaciones de la solución numérica de ecuaciones diferenciales


ordinarias.

Mecánica

La física trata de la investigación de las leyes que gobiernan el comportamiento


del universo físico. Por universo físico entendemos la totalidad de objetos a
nuestro alrededor, no sólo las cosas que observamos sino también las que no
observamos, tales como los átomos y moléculas. El estudio del movimiento de los
objetos en nuestro universo es una rama de la mecánica llamada dinámica
formulada mediante las leyes del movimiento de Newton. Para los objetos que se
mueven muy rápido, cerca de la velocidad de la luz, no podemos usar las leyes de
Newton. En su lugar debemos usar una versión revisada de estas leyes,
desarrolladas por Einstein y conocidas como mecánica relativista, o mecánica de
la relatividad. Para objetos de dimensiones atómicas las leyes de Newton tampoco
son válidas. De hecho, para obtener descripciones precisas del movimiento de

19 
 
objetos de dimensiones atómicas, necesitamos establecer un conjunto de leyes
denominadas mecánica cuántica

Circuitos eléctricos

Así como la mecánica tiene como base fundamental las leyes de Newton, la
electricidad también tiene una ley que describe el comportamiento de los circuitos
eléctricos, conocida como la ley de Kirchhoff. Realmente, la teoría de la
electricidad está gobernada por un cierto conjunto de ecuaciones conocidas en la
teoría electromagnética como las ecuaciones de Maxwell. La ley de Kirchhoff es
adecuada para estudiar las propiedades simples de los circuitos eléctricos. El
circuito eléctrico más simple es un circuito en serie, en el cual tenemos una fem
(fuerza electromotriz), la cual actúa como una fuente de energía tal como una
batería o generador, y una resistencia, la cual consume o usa energía, tal como
una bombilla eléctrica, tostador, u otro electrodoméstico.

En física elemental encontramos que la fem está relacionada con el flujo de


corriente en el circuito. En forma simple, la ley dice que la corriente instantánea I
(en un circuito que contiene sólo una fem E y una resistencia R) es directamente
proporcional a la fem. Simbólicamente: I α E de donde, E = IR donde R es una
constante de proporcionalidad llamada el coeficiente de resistencia o simplemente,
resistencia. La ecuación anterior es conocida bajo el nombre de la ley de Ohm.

Circuitos más complicados, pero para muchos casos más prácticos, son circuitos
que contienen otros elementos distintos a resistencias. Dos elementos importantes
son inductores y condensadores. Un inductor se opone a cambios en corriente.
Tiene un efecto de inercia en electricidad de la misma manera que una masa tiene
un efecto de inercia en mecánica. Un condensador es un elemento que almacena
energía.

En física hablamos de una caída de voltaje a través de un elemento.

En la práctica podemos determinar esta caída de voltaje, o como se llama


comúnmente, caída de potencial o diferencia de potencial, por medio de un
instrumento llamado voltímetro.

Aplicaciones a flujo de calor en estado estacionario.

Considere una pieza de material de longitud indefinida acotada por dos planos
paralelos A y B, según la figura, suponiendo que el material es uniforme en todas
sus propiedades, por ejemplo, calor específico, densidad, etc.
20 
 
Considerando que los planos A y B se mantienen a 50º C y 100ºC,
respectivamente, todo punto en la región entre A y B alcanza cierta temperatura
que no cambia posteriormente. Así todos los puntos en el plano C entre A y B
estarán a 75ºC,y en el plano E a 90ºC. Cuando la temperatura en cada punto de
un cuerpo no varía con el tiempo decimos que prevalecen las condiciones de
estado estacionario o que tenemos un flujo de calor en estado estacionario.

Aplicaciones a problemas combinados de crecimiento y decrecimiento.

La ecuación diferencial dt/dy = ay nos dice que la variación con el tiempo de una
cantidad y es proporcional a y. Si la constante de proporcionalidad a es positiva
siendo y positivo, entonces dy/dt es positivo e y aumenta. En este caso hablamos
de que y crece, y el problema es de crecimiento. Por otro lado, si a es negativo
siendo y positivo, entonces dy/dt es negativo e y decrece. Aquí el problema es uno
que involucra decrecimiento.

Puesto que la solución de dt/dy = ay identificada como una ecuación de variables


separadas está dada por la función exponencial y = ceat , resolviendo mediante
integración, definiéndose la ecuación diferencial dt/dy = ay como la ley de
crecimiento exponencial si a > 0 y la ley de decrecimiento exponencial si a <0.

El cable colgante.

Considere un cable o una cuerda que cuelga de dos puntos A y B (según la


figura), no necesariamente al mismo nivel. Suponiendo que el cable es flexible de
modo que debido a su carga (la cual puede ser debida a su propio peso, o a
fuerzas externas actuantes, o a una combinación de éstas) toma la forma como en
la figura. Siendo C la posición más baja del cable, escogiendo los ejes x e y como
en la figura, donde el eje y pasa por C

21 
 
Considere aquella parte del cable entre el punto más bajo y cualquier punto P en
el cable con coordenadas (x, y). Esta parte estará en equilibrio debido a la tensión
T en P (según la segunda figura), la fuerza horizontal H en C, y la carga vertical
total en el segmento CP del cable denotada por W(x), la cual asumimos que actúa
en algún punto Q, no necesariamente en el centro del arco CP. Para el equilibrio,
la suma algebraica de las fuerzas en la dirección x (u horizontal) debe ser igual a
cero, y la suma algebraica de fuerzas en el eje y (o vertical) debe ser igual a cero.
Otra forma de indicar lo mismo es que la suma de fuerzas hacia la derecha debe
ser igual a la suma de las fuerzas hacia la izquierda, y la suma de fuerzas hacia
arriba debe ser igual a la suma de fuerzas hacia abajo. Descomponemos la
tensión T en dos componentes (líneas punteadas en la figura), la componente
horizontal con magnitud TcosØ, y la componente vertical con magnitud TsenØ.

Las fuerzas en la dirección x son H hacia la izquierda y TcosØ hacia la derecha,


mientras que las fuerzas en la dirección y son W hacia abajo y TsenØ hacia arriba.
De donde, haciendo equilibrio de acciones o fuerzas en las direcciones de los ejes
tenemos:
TsenØ = W, TcosØ = H

Dividiendo y usando el hecho de que la tangente = dy/dx = pendiente en P,


tenemos
dy/dx = W/H

En esta ecuación, H es una constante, puesto que es la tensión en el punto más


bajo, pero W puede depender de x. Derivando esta última ecuación con respecto a
x, tenemos:

d2y/dx2 = 1/H dW/dx

Ahora dW/dx representa el incremento en W por unidad de incremento en x; esto


es, la carga por unidad de distancia en la dirección horizontal. La ecuación
diferencial anterior es fundamental.

22 
 
La resonancia mecánica.

Cuando la frecuencia de una fuerza externa periódica aplicada a un sistema


mecánico está relacionada de una manera sencilla con la frecuencia natural del
sistema, puede ocurrir el fenómeno de la resonancia mecánica, la cual eleva las
oscilaciones tales que el sistema puede desplomarse o colapsarse. Una compañía
de soldados marchando en fila a través de un puente puede de esta manera hacer
que el puente colapse. En una manera análoga, puede ser posible que una nota
musical de una frecuencia característica propia estalle un cristal.

Debido a los grandes daños que pueden ocurrir, la resonancia mecánica es en


general algo que necesita ser evitado, especialmente por el ingeniero al diseñar
estructuras o mecanismos vibrantes.

La resonancia mecánica puede también servir para propósitos útiles. Por ejemplo,
si un automóvil se quedara atascado en la nieve (o barro), puede, al “mecerlo”, ser
puesto a vibrar con su frecuencia natural. Entonces, al aplicarle una fuerza con
esta misma frecuencia, la resonancia mecánica resultante puede ser algunas
veces suficiente para liberarlo.

6.5 Uso de herramientas computacionales.

MATLAB dispone de varias funciones para resolver mediante procedimientos


numéricos ecuaciones diferenciales: ode23, ode45, ode113, etc, (véase en el
sistema de ayuda para qué tipos de problemas es más adecuado cada uno de los
procedimientos). Eligiremos ode45 para resolver la mayor parte de los problemas.

La función ode45, su sintaxis es la siguiente

[t,x]=ode45(odefun,tspan,x0, options, params)

• x es una matriz donde cada columna corresponde a las variables


dependientes y t es el vector tiempo.
• odefun es el nombre de la función,
• tspan especifica el intervalo de tiempo, un vector de dos números
tspan=[ti,tf], tiempo inicial y final. Para obtener valores de las variables
dependientes en instantes concretos t0, t1, t2, ... tn. se escribe
tspan=[t0,t1....tn];

23 
 
• x0 es un vector que contiene los valores iniciales.
• options es una estructura que se crea con la función odeset, que
explicaremos al final de esta página ya que es un asunto bastante
complicado.
• params son parámetros que queremos pasar a la función odefun

En la mayor parte de los ejemplos, utilizaremos los tres primeros parámetros:


llamaremos a la función ode45 y le pasaremos la función odefunc, los instantes
inicial y final en el vector tspan y las condiciones iniciales en el vector x0.

Vamos a volver a resolver los problemas planteados en este capítulo mediante la


función MATLAB ode45.

Ecuación diferencial de primer orden

Elaboramos el script titulado carga_1 para integrar la ecuación diferencial de


primer orden que describe la carga de un condensador.

Rdq/dt = Vε/R−q/CR

V0=10;
R=input('Resistencia R: ');
C=input('Capacidad C: ');
tf=input('tiempo final, tf: ');
f=@(t,x) V0/R-x/(R*C);

tspan=[0 tf];
x0=0;
[t,x]=ode45(f,tspan,x0);
plot(t,x,'r')
xlabel('t')
ylabel('q');
title('carga del condensador')

En la ventana de comandos corremos el script carga_1

>> carga_1
Resistencia R: 2
Capacidad C: 0.8
tiempo final, tf: 10

Sistema de dos ecuaciones diferenciales de primer orden


24 
 
Elaboramos el script titulado radiactivo_1 para integrar el sistema de dos
ecuaciones diferenciales de primer orden que describe la serie de desintegración
radioactiva. A-->B-->C donde C es un elemento estable.

dx/dt = −ax
dy/dt = ax−by

En la matriz x que devuelve la función ode45, x(1) representará los sucesivos


valores de la variable x y x(2) representará a la variable y. El mismo criterio se
empleará para determinar el vector x0 de las condiciones iniciales.

La definición de las funciones f(t,x,y) y g(t,x,y) aparecen en un vector columna,


separadas por ; (punto y coma)
fg=@(t,x) [-a*x(1);a*x(1)-b*x(2)]; % x(1) es x, x(2) es y

El script radiactivo_1 será el siguiente:


a=input('parámetro a: ');
b=input('parámetro b: ');
%condiciones iniciales en el vector x0
x0=zeros(1,2);
x0(1)=input('valor inicial de x: ');
x0(2)=input('valor inicial de y: ');
tf=input('tiempo final, tf: ');

tspan=[0 tf];
fg=@(t,x) [-a*x(1);a*x(1)-b*x(2)];
[t,x]=ode45(fg,tspan,x0);
plot(t,x)
xlabel('t')
ylabel('x,y');
title('dx/dt=-ax, dy/dt=ax-by')

En la ventana de comandos corremos el script radiactivo_1


>> radioactivo_1
parámetro a: 0.1
parámetro b: 0.2
valor inicial de x: 100
valor inicial de y: 0
tiempo final, tf: 20
Alternativamente, vamos a definir las funciones f(t,x,y) y g(t,x,y) en un fichero .m y
le pasamos los valores de los parámetros a y b.

25 
 
function z=func_radioactivo(t,x,a,b)
z=[-a*x(1);a*x(1)-b*x(2)]; % x(1) es x, x(2) es y
end

Elaboramos el script radioactivo_2 para establecer los valores de los parámetros a


y b, las condiciones iniciales y llamar a la función que realiza la integración
numérica ode45. El primer parámetro de ode45 es el handler (manejador de la
función) a integrar que se especifica del siguiente modo @nombre_funcion.
[t,x]=ode45(@func_radioactivo,tspan,x0);

Ahora bien, func_radioactivo precisa de los valores de los parámetros a y b. Hay


dos formas de hacerlo. La más sencilla es definir una función anónima fg en
términos de func_radioactivo.
fg=@(t,x) func_radioactivo(t,x,a,b);

Véase la misma situación en la llamada a función fzero al final de la página Raíces


de una ecuación
a=input('parámetro a: ');
b=input('parámetro b: ');
%condiciones iniciales
x0=zeros(1,2);
x0(1)=input('valor inicial de x: ');
x0(2)=input('valor inicial de y: ');
tf=input('tiempo final, tf: ');
tspan=[0 tf];
fg=@(t,x) func_radioactivo(t,x,a,b);
[t,x]=ode45(fg,tspan,x0);
plot(t,x)
xlabel('t')
ylabel('x,y');
title('dx/dt=-ax, dy/dt=ax-by')
En la ventana de comandos corremos el script radioactivo_2
>> radioactivo_2
parámetro a: 0.1
parámetro b: 0.2
valor inicial de x: 100
valor inicial de y: 0
tiempo final, tf: 20
Opciones de ode45

Imaginemos que estudiamos el movimiento de caída de un cuerpo, no sabemos


cuanto tiempo tardará en llegar al suelo, desconocemos el valor del elemento tf en
el vector tspan. Sin embargo, queremos detener el proceso de integración
26 
 
numérica de la ecuación diferencial que describe el movimiento cuando la posición
del móvil sea cero. La función MATLAB ode45 dispone de un parámetro adicional
options donde podemos indicarlo, pero es bastante lioso e intentaremos explicarlo
mediante ejemplos.

Volvemos a resolver la ecuación diferencial que describe las oscilaciones


amortiguadas y detendremos el proceso de integración cuando el móvil alcance la
posición máxima, su velocidad es nula.

Supongamos que el oscilador amortiguado estudiado anteriormente, de frecuencia


natural ω0=2, constante de amortiguamiento γ=0.25, parte de la posición x0=2.5
con velocidad nula, queremos detener el proceso de integración cuando el móvil
alcance la posición máxima, cuando su velocidad es nula, tal como se muestra en
la figura, con lo que se completa un periodo.

Los pasos a seguir son los siguientes:


1.-Definimos la función cuyo nombre es opcion_ode45
function [detect,stopin,direction]=opcion_ode45(t,x)
detect=[x(1) x(2)]; %[posición, velocidad]
stopin=[0 1]; % 1 indice que detiene la integración
cuando la velocidad se hace cero
direction=[0 -1]; % 1 crece, -1 decrece, 0 no importa
end
2.-Creamos la estructura opts con la llamada a la función odeset
opts=odeset('events',@opcion_ode45);
Cuando se utiliza options la función ode45 devuelve los tiempos te en los cuales
ocurren los 'eventos' y los correspondientes valores de las variables dependientes

27 
 
(posición, velocidad) en el vector xe. Finalmente, ie es un índice que es útil cuando
se vigilan varios eventos.
3.-Le pasamos opts a la función ode45 en su cuarto parámetro
[t,x,te,xe,ie]=ode45(odefunc,tspan,x0,opts);
Escribimos el script oscilador_2 para resolver la ecuación diferencial de segundo
orden y detener el proceso de integración de acuerdo con lo estipulado en el
parámetro opts.
w0=2;
g=0.25;
x0=[2.5 0];
tf=10;
f=@(t,x) [x(2);-2*g*x(2)-w0*w0*x(1)];
tspan=[0 10];
opts=odeset('events',@opcion_ode45);
[t,x,te,xe,ie]=ode45(f,tspan,x0,opts);
te,xe,ie
plot(t,x(:,1),'r')
grid on
xlabel('t')
ylabel('x');
title('oscilador amortiguado')

Cuando corremos el script oscilador_2 en la ventana de comandos se imprime los


siguientes datos relativos a los eventos.
Tiempo, te Posición x(1) Velocidad x(2) Indice ie
0.0000 2.5000 -0.0000 2
2.4378 0.0000 2.7173 1
3.1662 1.1322 -0.0000 2
• Cuando parte de la posición inicial x(1)=2.5 la velocidad es cero x(2)=0,
detecta velocidad (índice ie=2).
• Cuando pasa por el origen x(1)=0 detecta posición (índice ie=1), pero no se
detiene ya que en stopin se ha puesto un cero.
• Cuando la posición es x(1)=1.1322 detecta velocidad nula x(2)=0, (índice
ie=2) y la integración numérica se detiene ya que en stopin se ha puesto un
uno y la velocidad decrece en direction se ha puesto un -1.

La columna de tiempos nos proporcionan el periodo de la oscilación, te=3.1662.

Vamos ahora a marcar en la representación gráfica de la oscilación amortiguada,


las posiciones de máxima amplitud x(2)=0 y cuando pasa por el origen x(1)=0 sin
detener el proceso de integración numérica.

28 
 
Definimos una nueva versión de la función opcion1_ode45
function [detect,stopin,direction]=opcion1_ode45(t,x)
detect=[x(1) x(2)]; %[posición, velocidad]
stopin=[0 0];
direction=[0 0];
end
Creamos la estructura opts mediante odeset y se la pasamos al procedimiento de
integración ode45.
w0=2;
g=0.25;
x0=[2.5 0];
tf=10;
f=@(t,x) [x(2);-2*g*x(2)-w0*w0*x(1)];
tspan=[0 7];
opts=odeset('events',@opcion1_ode45);
[t,x,te,xe,ie]=ode45(f,tspan,x0,opts);

hold on
plot(t,x(:,1),'r')
plot(te(ie==1),xe(ie==1),'o','markersize',6,'markerface
color','k')
plot(te(ie==2),xe(ie==2),'o','markersize',6,'markerface
color','b')
grid on
xlabel('t')
ylabel('x');
title('oscilador amortiguado')
hold off

29 
 
Si solamente estamos interesados en los máximos definimos una nueva versión
de la función opcion2_ode45
function [detect,stopin,direction]=opcion2_ode45(t,x)
detect=x(2);
stopin=0;
direction=-1;
end

Modificamos el script oscilador_4


w0=2;
g=0.25;
x0=[2.5 0];
tf=10;
f=@(t,x) [x(2);-2*g*x(2)-w0*w0*x(1)];
tspan=[0 7];
opts=odeset('events',@opcion1_ode45);
[t,x,te,xe,ie]=ode45(f,tspan,x0,opts);
te,xe,ie
hold on
plot(t,x(:,1),'r')
plot(te(ie==1),xe(ie==1),'o','markersize',6,'markerfacecolor',
'b')
grid on
xlabel('t')
ylabel('x');
title('oscilador amortiguado')
hold off
Corremos el script oscilador_4 en la ventana de comandos y observamos los
resultados

Paso de parámetros a la función

Como hemos visto, a ode45 se le pasa la función (handle) a integrar en su primer


argumento. Si la función contiene parámetros como la frecuencia angular ω0, no
hay problema si la función se define como anónima, tal como se ha mostrado en
los ejemplos previos. Si la función se define en un fichero entonces a la función se
le pasan los valores de los parámetros en el quinto argumento params de ode45.

Los pasos se explican en el siguiente ejemplo:

El sistema de ecuaciones de Lorentz es un sistema de tres ecuaciones


diferenciales de primer orden

30 
 
dx/dt = −σx+σy
dy/dt = ρx−y−xz
dz/dt = −βz+xy
donde σ=10, β=8/3 y ρ=28

Vamos a resolver el sistema de tres ecuaciones diferenciales con las condiciones


iniciales siguientes: en el instante t=0, x0=-8, y0=8 z0=27.
1. Escribir una función denominada lorentz(t,x,p) como fichero .m que
contenga las tres ecuaciones y dependa de los tres parámetros σ=p(1),
β=p(2) y ρ=p(3). Observar que la variable x se guarda en el primer
elemento x(1), la variable y en el segundo x(2) y la variable z en el tercer
x(3) elemento del vector x.
2. Escribir un script denominado lorentz_script que llame a la función MATLAB
ode45, para resolver el sistema de ecuaciones diferenciales para las
condiciones iniciales especificadas.
3. Pasar los parámetros σ, β y ρ como elementos de un vector p a la función
ode45 para que a su vez se los pase a la función lorentz.
4. Dibujar el atractor de Lorentz de z en función de x hasta el instante tf=20 en
una primera ventana gráfica.
5. Dibujar x, y y z en función del tiempo en tres zonas de una segunda
ventana gráfica.
6. Examinar el comportamiento del sistema para otras condiciones iniciales,
t=0, x0=1, y0=2 z0=3.

Definimos la función lorentz como fichero .m

function fg=lorentz(t,x,p)
%x(1) es x, x(2) es y y x(3) es z
% p(1) es sigma, p(2) es beta y p(3) es rho
fg=[-p(1)*x(1)+p(1)*x(2); p(3)*x(1)-x(2)-x(1)*x(3); -p(2)*x(3)+x(1)*x(2)];
end

Elaboramos el script lorentz_script


x0=[-8 8 27]; %valores iniciales
tspan=[0 20];
p=[10 8/3 28]; %parámetros
%no pasamos nada [] en el parámetro options de ode45
[t,x]=ode45(@lorentz,tspan,x0,[],p);
figure
plot(x(:,1),x(:,3),'r')
xlabel('x')

31 
 
ylabel('z');
title('Atractor de Lorentz')

figure
subplot(3,1,1)
plot(t,x(:,1))
ylabel('x');
subplot(3,1,2)
plot(t,x(:,2))
ylabel('y');
subplot(3,1,3)
plot(t,x(:,3))
ylabel('z');
xlabel('t')

En la ventana de comandos corremos el script lorentz_script

>> lorentz_script

Aparecen dos ventanas gráficas, la primera con el atractor de Lorentz, la


representación z(x) y la segunda ventana dividida en tres regiones que muestran
x(t), y(t) y z(t)

32 
 

Vous aimerez peut-être aussi