ECUACIONES DIFERENCIALES ORDINARIAS, IMPLEMENTACIÓN EN MATLAB

**************************************newton

Data aequatione quotcunque fluentes quantitae involvente fluxiones invenire et vice versa

Es útil derivar funciones y resolver ecuaciones diferenciales.

Isaac Newton en un comunicado a W. Leibniz

          ********************************************

Mariposa deLorenz

Pequeños cambios en las condiciones iniciales inducen grandes cambios en el comportamiento de las soluciones de la ecuación de Lorenz

Matlab es un entorno computacional que permite realizar cálculo simbólico y simulaciones numéricas, entre otras cosas. Por ejemplo,  podemos resolover simbólica o numéricamente ecuaciones diferenciales. Un modelo simplificado del estudio del flujo atmosférico llevó a E. Lorenz a un sistema de tres ecuaciones diferenciales de primer orden. Es a partir de este ejemplo que Lorenz acuñó lo que dió e llamar el efecto mariposa. 

La figura que observamos puede mirarse como las alas de una mariposa al volar. Aquí veremos la forma como se resuelven de modo simbólico ecuaciones diferenciales de primer o segundo orden que tengan una presentación simple. Adimismo, veremos la manera de graficar las soluciones halladas.

En muchas ocasiones resover una ecuación diferencial puede ser prácticamente imposible, en este caso nos queda el recurso de los métodos numéricos para aproximar soluciones de ecuaciones diferenciales.  En esta situación haremos uso de una instrucción en matlab: ode45, que nos permitirá resolver numéricamente una ecuación diferenciall de primer orden o sistemas de ecuaciones diferenciales de primer orden.

Recordemos que una ecuación de primer orden tiene la forma

\frac{dy}{dx}=f(x,y).

Asociada a ella podemos tener una condición inicial

y(x_0)=y_0.

Por ejemplo,

\frac{dy}{dx}=y\sin x

con condición inicial y(\pi)=0.

Un sistema no autónomo de ecuaciones diferenciales en el plano tiene la forma

x'=f_1(x,y,t), \hskip1cm y'=f_2(x,y,t),

donde las funciones

f_1(x,y,t),

 f_2(x,y,t),

son funciones conocidas. Un ejemplo de un sistema de ecuaciones de primer orden en el plano está dado por

x'=x+y-t \hskip1cm y'=2x-3y+\cos t.

En el documento PDF se encuentran instrucciones para resolver ecuaciones diferenciales simbólica y numéricamente usando el ambiente computacional y de visualización Matlab.

Documento PDFEDOSMATLAB 

A continuación usaremos la instrucción dsolve para hallar soluciones analíticas de una ecuación diferencial de primer orden.

Una primera forma es escribir la suguiente sucesión de instrucciones en la ventana de comandos en Matlab

>> Solucion1 = dsolve(‘Dy = -3*x*y^2′,’y(0)=5′,’x’)
>> x =-2:0.05:3;
>> y=eval(vectorize(Solucion1));
>> plot(x,y)

el primer renglón define la ecuación diferencial que se desea resolver, y'=-3xy^2, de modo que se satisfaga la condición inicial x(0)=5 en la variable x. Por su parte el segundo renglón determina que se resuelva la ecuación diferencial con la condición inicial dada.  Matlab muestra la salida

Solucion1 =

1/((3*x^2)/2 + 1/5)

en la ventana de comandos, es decir Solucion1=\frac{1}{(3x^2/2)+1/5}, . En el segundo renglón se establece los puntos del intervalo [-2,3] donde se evaluará la solución, de modo que entre ellos haya ua distancia h=0.05. La instrucción del tercer renglón calcula las imágenes de estos puntos bajo la Solución1.  Finalmente, el cuarto renglón da la instrucción para graficar los puntos (x,Solucion1(x)) para los valores de x establecidos en el segundo renglón del programa.

La gráfica que se obtiene es la siguiente

MatlabEj10

 una última línea de la forma

print -djpeg100 Nombre.jpg

permite guardar la figura generada en formato JPG, como Nombre.jpg en el directorio donde se trabaja.

Otra manera de realizar las mismas instrucciones consiste en escribir en la ventana del editor el conjunto de comandos

VentanaEditor3

y guardarlas en un archivo tipo script, el cual podemos llamar Ejemplo1.m . Posteriormente,  con la tecla F5 podemos compilar el archivo y obtener tanto la solucion como  la gráfica recientemente logradas.

La Figura que se obtiene aparece en la  ventana de gráficos.

Si solo deseamos obtener la solución analítica de una ecuación diferencial de primer orden, no es necesario recurrir a escribir un programa, el uso de la ventana de comandos es más simple.

Por ejemplo, si deseamos hallar la solución general de la ecuación diferencial

\frac{dy}{dx}=2y+\cos(x),

solo requerimos escribir la siguiente instrucción en la ventana de comandos

>>  Solucion = dsolve(‘Dy = 2*y+cos(x)’,’x’)

y el resultado que se obtiene en la ventana de comandos es el siguiente

Solucion =

sin(x)/5 – (2*cos(x))/5 + C2*exp(2*x)

Observemos que la solución depende de una constante C2, la cual se obtiene de la constante de integración al resolver Matlab de manera simbólica la ecuación diferencial.

MODELOS DE CRECIMIENTO DE POBLACIÓN

MODELO MALTHUSIANO

En este modelo de crecimiento poblacional se supone que la tasa de variación instantánea de una población es proporcional, en todo momento, a la población existente. Este tipo de modelo se usan para estudiar, por ejemplo, la forma como cambia la población de un cultivo de bacterias cuando estas se repoducen por división celular. Se supone asimismo que las bacterias tienen condiciones adecuadas para su reproducción. La temperatura es apropiada, tienen espacio vital y alimento suficiente.

Si P(t) denota la cantidad de bacterias que hay en el cultivo en el instante t, se tiene que la variación instantánea de esta, dada por \frac{dP}{dt}, es proporcional a la población. Por lo que

\frac{dP}{dt}=kP(t).

Si la población inicial de bacterias es P_0,  usando el método de variables separables, el lector puede mostrar que al tomar P(0)=P_0 como condición inicial, entonces la solución particular está dada por la función

P(t)=P_0e^{kt}.

Es de notar que en este modelo no han sido tomados en cuenta muchos factores que pueden afectar el crecimiento de una población. Entre ellos podemos mencionar una tasa de mortandad por causas naturales, enfermedades, falta de alimento, sobrepoblación, entre otros.

Una primera mejora en nuestro modelo, olvidando que en particular hemos considerado una población de bacterias. Es tomar en cuenta que además de una tasa de generación de nuevos individuos por unidad de tiempo, también hay una tasa de fallecimientos (por causas naturales) por unidad de tiempo.

Si la tasa de nacimientos por unidad de tiempo es proporcional a la población, con constante de proporcionalidad \alpha y la tasa de muertes, en todo instante, también es proporcional a la cantidad de individuos, con constante de proporcionalidad \beta, entonces el modelo poblacional est\’a dao por

\frac{dP}{dt}=\alpha P -\beta P=(\alpha-\beta)P.

Un primer ejercicio consiste en mostrar que si \alpha>\beta entonces la población crecerá exponencialmente, mientras que en el caso \alpha<\beta, tendremos una extinción exponencial de la población.

MODELO LOGÍSTICO

Un modelo más realista que el malthusiano para el estudio de la evolución de una población es el conocido como modelo logístico, dado por la ecuación diferencial \frac{dP}{dt}=kP\left(1-\frac{P}{K}\right). Un modelo más realista que el malthusiano para el estudio de la evolución de una población es el conocido como modelo logístico, dado por la ecuación diferencial   \frac{dP}{dt}=kP\left(1-\frac{P}{K}\right)., donde la constante K se cono como la capacidad de carga del medio ambiente. Una forma de pensar esta ecuación es partir de un modelo malthusiano \frac{dP}{dt}=\alpha P y considerar que no existe espacio vital o alimento suficiente que permita continuar a la población con un crecimiento malthusiano o exponencial. Tomando en consideración estas hipótesis, se dará un enfrentamiento (por el alimento o por el espacio vital)   de un individuo de la población con otros, de estos enfrentamientos, se producirá la muerte de una parte proporcional de la población, \beta P.  Al tomar en cuenta a todos los individuos de la población y todos los posibles encuentros, se producirá la muerte de  \beta P^2 elementos de la población. Por lo que, el modelo que toma encuenta estas consideraciones sobre la restricción de alimento o de espacio vital está dado por \frac{dP}{dt}=\alpha P-\beta P^2.

  • Suponiendo que una población tiene originalmente un crecimiento malthusiano con constante de crecimiento dado por \alpha=0.2 y constante de decrecimiento \beta=0.00081 debido a encuentros de los individuos al luchar por alimento o espacio vital, obtenga una aproximación de la capacidad de carga del medio ambiente. Suponga que la cantidad de individuos en un instante t=0 es igual a 300 individuos. Establezca un modelo de población con estos datos en términos de una ecuación diferencial de primer orden con condición inicial. Resuelva la ecuación diferencial usando el comando dsolve y grafique la solución. obtenida. Para la condición inicial dada, ¿la población aumentará?, ¿disminuirá?.

Para lograr modelo más realistas de dinámica de poblaciones sería necesario considerar otros elementos que pueden influir en ella, como la aparición de enfermedades o epidemias, fenómenos de emigración o inmigración. Sólo por mencionar algunos.

Ecuaciones diferenciales de primer orden y ode45

Algunas veces las ecuaciones diferenciales que se obienen al modelar algún fenómeno no son fáciles de resolver o simplemente su presentación tiene una forma compleja, de modo que hallar soluciones explícitas o implícitas de manera analítica se convierte en un problema difícil de resolver o de plano la ecuación diferencial no se puede resolver mediante alguno de los métodos conocidos.

En una situación de este estilo solo queda el camino de los métodos numéricos. El lector se dirá :“¡pero, yo no sé nada de métodos numéricos!”. Aún en una situación así, Matlab tiene ya establecidas rutinas numéricas que podemos usar y nos permiten aproximar soluciones para un problema con condición inicial.

Por ejemplo, consideremos el problema un problema de dinámica de poblaciones que obedece a un modelo logístico

\frac{dP}{dt}=0.0025P(100-P), \hskip1cm P(0)=0.01

aún cuando podemos resover esta ecuación diferencial por el método de variables separables, usemos la instrucción ode45 que nos permitirá obtener una aproximación numérica de la solución a este problema y graficar la solución en un intervalo que consideremos nos puede dar información sobre la solución. Para lograr esto, podemos introducir la siguiente sucesión de instrucciones en la ventana de comandos

>> f = @(x,P) 0.0025*P*(100-P);

>>Intervalo=[0 70];

>>CondInic=0.01;

>>[x,y]=ode45(f,Intervalo,CondInic);

>>plot(x,y)

O en su caso, crear un programa en un archivo tipo script que contenga la misma sucesión de instrucciones

f = @(t,P) 0.0025*P*(100-P);

% función f(t,P)=0.0025*P*(100-P)
Intervalo=[0 70];

% intervalo sobre el cual se realizará la aproximación numérica
CondInic=0.01;

% Condición inicial de la ec’n diferencial P(0)=0.01
[t,P]=ode45(f,Intervalo,CondInic);

% gneración de vectores t y P
plot(t,P, ‘r’,’LineWidth’,2)

% se grafican los puntos (t,P) para obrener la grafica de la                                                %aproximación de la solucion del problema con condición inicial
grid on

% se grafica el enmallado
axis([0 70 -5 105])

% la grafica aparecerá en la ventana dada pr el rectangulo

% [0, 70]X[-5, 105]
print djpeg100 PoblacionLogistica.jpg 

% se guarda la gráfica en el  archivo  PoblacionLogistica.jpg 

Recordemos que las expresiones del tipo

% Condición inicial de la ec’n diferencial P(0)=0.01

son comentarios sobre cada una las instrucciones y no forman parte del programa.

El prpograma anterior genera la gráfica siguiente

PoblacionLogistica

Sistemas de Ecuaciones diferenciales de primer orden y ode45

Asimismo, usando la sintexis de para resover una ecuación diferencial ordinaria, la podemos usar para sistemas de ecuaciones de primer orden,

x'=f_1(x,y,t) \hskip2cm y'=f_2(x,y,t

donde las funciones

f_1(x,y,t)

y

f_2(x,y,t)

son funciones conocidas. Por ejemplo, para el sistema de ecuaciones diferenciales

x'=2xy+\sin t,\hskip2cm x'=x+3y.

se tiene que  f_1(x,y,t)=2xy+\sin t y f_2(x,y,t)=x+3y.

Existen muchos campos de las ciencias y las ingenierías donde se usan las ecuaciones diferenciales para modelar distintos fenómenos.

A lo largo de la historia de la humanidad, las enfermedades nos han compañado. Se establecido modelos de propagación de enfermedades. Uno de los modelos más clásicos divide a una población N en tres tipos de elementos, susceptibles de contraer la enfermedad, infectados, aquellos individuos que han contraído la enfermedad y recuperados, quienes por alguna razón se han recuperado de ella: Estos subgrupos son mutualmente excluyentes. Un individuos no puede pertenecer a dos grupos simultáneamente.

Un individuo suceptible puede enfermar y posteriormente se recuperará de la enfermedad. Una vez recuperado no puede contraerla nuevamente.

Este modelo que se conoce como SIR, está dado por el siguiente conjunto de tres ecuaciones diferenciales

S'=-aSI,\hskip1cm I'=aSI-bI, \hskip1cm R'=bI

propuesto por Kermack y McKendrick. Las condiciones iniciales para este sistema están dadas por S(0)=S_0, I(0)=I_0 y R(0)=R_0. Si sumamos las tres ecuciones diferenciales se tiene que

N'=S'+I'+R'=0

por lo que la población total N=S+I+R es constante.

Usemos la instrucción ode45 para visualizar las soluciones del sistema de ecucaiones diferenciales para cirtos valores de los parámetros a y b, así como para una terna de condiciones iniciales.

Tomemos la constante de infección de los susceptibles como  a=0.01 y la tasa de recuperación de los infectados igual a b=0.1. Asimismo, consideremos una población de 100 individuos, con uno infectado, 999 susceptibles y ninguno recuperado.

Para realizar la simulación primero se requiere definir un archivo tipo función donde se establezca el sistema de ecuaciones diferenciales del modelo SIR. Las siguientes instrucciones realizan esta tarea

function SIR =ModeloSIR(t,y)
TasInf = .018;
TasRecup = .1;
SIR(1) =-TasInf*y(1)*y(2); % Cambio de Susceptibles
SIR(2) = TasInf*y(1)*y(2)-TasRecup*y(2); % cambio de infectados
SIR(3) = TasRecup*y(2); % tasa de recuperación
SIR = [SIR(1) SIR(2) SIR(3)]’;

estas instrucciones se deben guardar en un archivo que se llamará ModeloSIR.m Observemos los valores que se han establecido para los parámetros asociados a las tasas de infección y recuperación de los elementos de la población.

Una vez establecido el sistema de ecuaciones diferenciales en este archivo, necesitamos ahora un archivo tipo script en el cual se den las instrucciones que permitan resolver numéricamente el sistema de ecuaciones diferenciales para los valores parámetros establecidos y las condiciones iniciales dadas. Finalmente se muestran simultáneamente las gráficas para las poblaciones de susceptibles (S), infectados (I)  y recuperados (R) en el intervalo [0,50].

tinic = 0;
tfinal =50;
Intervalo=[tinic,tfinal];
CIs = [99 1 0];
[t y] = ode45(‘ModeloSIR’,Intervalo,CIs);
plot(t,y(:,1),’-sr’,t,y(:,2),’:>g’,t,y(:,3),’py’)

La gráfica que obtenemos es muy semejante a la que se muestra a continuación.

MatlabEj12SIR

Estimado lector de este blog, le sugiero leer la entrada  “Métodos numéricos en ecuaciones diferenciales” que se encuentra también en este blog y que ha sido añadida recientemente.

 

Anuncios