¿Qué es exactamente una EDO?

A lo largo de las entradas de esta bitácora han ido apareciendo conceptos relativamente avanzados (ecuaciones en derivadas parciales…) sin mencionar casi los conceptos previos (previos en el sentido pedagógico, porque cronológicamente surge todo al mismo tiempo) como pueden ser las ecuaciones diferenciales ordinarias.

Una ecuación diferencial ordinaria (EDO a partir de ahora) es una expresión que relaciona la derivada de la función incógnita con la propia función. Así el problema queda reducido a ver si podemos encontrar (o demostrar que existe) una función tal que se verifique una relación más o menos complicada entre ella y sus tasas de cambio.

Un ejemplo lo tenemos en la Ley de Malthus. Supongamos que tenemos un número de insectos f. El incremento del número de insectos evolucionará de manera proporcional a el mismo, o de otra manera, en ausencia de rivales o limitaciones propias del medio la cantidad de hijos que medran es proporcional al número de padres. Razonable, ¿verdad?. Así la EDO la podemos escribir como f'(t)=cf(t), f(0)=f_0.

Unos comentarios antes de seguir: el número de datos iniciales (como f(0)=f_0 en el ejemplo anterior) tiene que ser el mismo que el máximo número de derivadas presentes en la expresión. Así como la ecuación anterior tenía una derivada debíamos poner un dato inicial. En el ejemplo del oscilador armónico al tener la ecuación x''=\omega^2 x necesitamos dos datos iniciales, x(0)=x0 y x'(0)=v0. Supongamos que tenemos una EDO de segundo orden (es decir, con dos derivadas) como la del oscilador armónico, entonces la solución general se escribe como $latex f(t)= c_1 e^{omega t}+ c_2e^{-omega t}$, donde para c_i son dos constantes que se fijan usando los datos iniciales.  Es decir, el conjunto de soluciones de una EDO linear de segundo orden (sin usar los datos iniciales) es un espacio vectorial (gracias a la linearidad) de dimensión 2 (el número de derivadas). Esta es una diferencia fundamental (y poco conocida entre los físicos) con respecto a las EDPs, pues una EDP tiene un espacio de soluciones de dimensión infinita.

Parece claro que conseguir escribir la solución de una EDO de manera explícita, es decir, una fórmula cerrada, no va a ser fácil o siquiera posible en cuanto la EDO sea no-lineal, por ejemplo algo como f''(t)=f^2(t)f'(t). Nos interesa entonces saber que existe dicha solución, ser capaces de simularla con el ordenador y ser capaces de extraer propiedades cualitativas.

Para una EDO general, f'(t)=F(t,f(t)), la existencia se puede segurar si se dan unas propiedades en la expresión F(x,y), a saber, que sea derivable en la variable y.

Para aproximar la solución de la EDO f'=F(t,f(t)) f(t_0)=f_0 se tienen que aproximar unas integrales, f(t)=f_0+\int_0^t F(s,f(s))ds. Según el método que usemos tendremos una mejor o peor cota del error cometido. La manera típica, conocida como métodos Runge-Kutta, de hacerlo es considerar una serie de puntos entre dos nodos temporales y calcular el valor de la función F en esos puntos. Después hemos de sumar dichos valores con unos pesos. La teoría de los métodos Runge-Kutta es bien conocida y se puede encontrar en la red sin mucho problema (siempre que se hable un mínimo de inglés al menos). Aquí voy a colgar unos códigos hecho por mí:

function [u,t,h,totalt]=euler(F,t0,T,u0,N)
%funcion que aproxima con un metodo de Euler explicito la solucion de la edo
%u’=F(u,t) hasta tiempo T con N nodos temporales. u0 es el dato inicial.
%%Rafael Granero Belinchon
tic
h=(T-t0)/N;
t=[t0:h:T];
u=zeros(N+1,1);
u(1)=u0;
for i=2:N+1
u(i)=u(i-1)+feval(F,u(i-1),t(i-1))*h;
end
plot(t,u);
totalt=toc;

function [u,t,h,totalt]=rungekutta4(F,t0,T,u0,N)
%Funcion que aproxima con una RK4 la solucion de
%y’=F(y) y(t0)=u0 y tiempo final T. N da el numero
%de nodos temporales.
%%Rafael Granero Belinchon
tic
h=(T-t0)/N;
t=[t0:h:T];
u=zeros(N+1,1);
u(1)=u0;
for i=2:N+1
s1=feval(F,u(i-1),t(i-1));
s2=feval(F,u(i-1)+h*0.5*s1,t(i-1)+h*0.5);
s3=feval(F,u(i-1)+h*0.5*s2,t(i-1)+h*0.5);
s4=feval(F,u(i-1)+h*s3,t(i-1)+h);
u(i)=u(i-1)+(s1+2*s2+2*s3+s4)*h/6;
end
plot(t,u);
totalt=toc;

function [u,t,totalt]=rungepasovariable(F,t0,T,u0,N,tol)
%funcion que aproxima con un metodo de paso variable
%la solucion de la ecuacion diferencial y’=F(y) en [t0,T]
%con u0 como dato inicial una cantidad N de pasos temporales y una tolerancia tol.
%%Rafael Granero Belinchon
tic
t=[t0];
dt=(T-t0)/N;
u=[u0];
u1=u;
u2=u;
while t(end)<=T
fev=feval(F,u(end),t(end));
s=u(end)+0.5*dt*fev;
u2(end+1)=u(end)+feval(F,s,t(end)+0.5*dt)*dt;
u1(end+1)=u(end)+fev*dt;
err=abs(u2(end)-u1(end));
h=0.9*dt*sqrt(tol/err);
u(end+1)=u(end)+feval(F,s,t(end)+0.5*h)*h;
t(end+1)=t(end)+h;
dt=h;
end
totalt=toc;

Caminos aleatorios e imágenes

Esta es nuestra entrada para el Carnaval de Matemáticas 2.2 (alojado esta vez en Gaussianos).

Muchas veces se ha escrito sobre la relación entre los caminos aleatorios y la ecuación del calor, y quizá próximamente tratemos nosotros ese tema. Sin embargo hoy vamos a ver una aplicación poco conocida de esa relación. En esta entrada vamos a tratar brevemente una manera de emplear las matemáticas, y mas concretamente los caminos aleatorios o las trayectorias brownianas, para que un ordenador sepa qué imagen está ‘viendo’. Ahora que han puesto unos radares de tramo (que funcionan memorizando las matrículas de los coches y midiendo tiempos para calcular la velocidad media del tramo donde está el radar) en las carreteras españolas este problema tiene una clara aplicación práctica.

Desde hace unos años el tratamiento de imágenes usando ecuaciones en derivadas parciales es un área de investigación matemática floreciente. Normalmente tratan el problema de detectar los contornos de una imagen o de suavizarlos (de manera que veamos mejor la imagen). Nuestro problema es ligeramente distinto. Nosotros, dada una silueta (es decir un contorno cerrado y suave que encierra un área negra mientras que lo de fuera es blanco), tenemos que enseñar al ordenador a sacar propiedades de los contornos de manera que aprenda a distinguir entre las distintas siluetas.

La manera usual de extraer propiedades de una silueta es ‘medir’ y ‘clasificar’ los puntos del interior del contorno en función de su posición relativa a la curva que delimita la silueta (a partir de ahora la denotaremos S, mientras que el contorno será \partial S). Esto puede hacerse por ejemplo con la distancia mínima. Es decir, a cada punto interior se le asigna un valor que viene dado por la distancia mínima a \partial S. Se forma así lo que se llama una segmentación (se divide la silueta en partes) que no es muy regular (he apostado con David a que vosotros, los lectores, podéis encontrar un ejemplo muy rápido…). Para utilizar esta manera de relacionar puntos del interior con la frontera lo que se hace es resolver la ecuación eikonal con condiciones de borde Dirichlet sobre la silueta: es decir se resuelve |\nabla u|^2=1\;\;x\in S,\; u(x)=0\;\; x\in \partial S. Esta manera tiene ciertas desventajas, algunas matemáticamente obvias. Por ejemplo podemos convencernos rápidamente de que la ecuación anterior no tiene una única solución. En efecto, consideremos el problema en una dimensión: tenemos así a ecuación diferencial ordinaria |u'(x)|=1 en un intervalo acotado. Podemos construir infinitas soluciones, basta con ir construyendo triángulos con lados de pendiente 1 o -1. Podemos construirlos más grandes, más pequeños, unos pocos o muchos… Cada una de estas construcciones será una solución ‘débil’ (otro día hablaremos más de la soluciones débiles, hoy lo dejo caer sólo :P).

Así que si descartamos la aproximación anterior tenemos que proponer una nueva… para que no nos digan que hacemos críticas destructivas. Así que lo que hacemos (ver la referencia más abajo) es considerar un camino aleatorio, y más concretamente consideramos el tiempo medio, que denotamos por t que tarda una partícula que siga dicho camino aleatorio en golpear \partial S si inicialmente estaba en un punto x\in S. Cuando a cada x le asignamos este t tenemos una segmentación. ¿Qué ecuación diferencial cumple? En (1) la motivan razonando de la siguiente manera: sea t(x,y) el tiempo medio que emplean estas partículas en golpear el contorno del dominio saliendo desde el punto (x,y) (interno de la silueta S). Entonces si (x,y)\in \partial S se tiene que t(x,y)=0, si no, por ser las probabilidades uniformes se tiene que se puede calcular conociendo los valores de los puntos vecinos. Efectivamente, si estamos en un punto (x,y) y conocemos el valor de t en los puntos inmediatamente vecinos lo que podemos hacer es ‘gastar un movimiento’ en movernos a un punto vecino (siguiendo el camino aleatorio uniforme, lo que nos da una probabilidad 1/4 de elegir un determinado punto adyacente) y sumarle el tiempo medio que se emplea desde este nuevo punto. Por lo tanto se tiene que el valor es
t(x,y)=1+\frac{1}{4}\left(t(x+dx,y)+t(x-dx,y)+t(x,y+dx)+t(x,y-dx)\right).

Entonces observamos que la discretización del Laplaciano es
\Delta t(x,y)\approx\frac{t(x+dx,y)+t(x-dx,y)+t(x,y+dx)+t(x,y-dx)-4t(x,y)}{dx^2}, y por lo tanto la ecuación anterior es una versión discretizada de -\Delta t=\frac{4}{dx^2}.

Una manera rigurosa de obtener la misma conclusión es considerar la ecuación
\frac{1}{2}\Delta u=-1, con datos de borde Dirichlet homogéneos. Sea ahora \tau_{(x,y)}=\inf\{s:X_s(x,y)\in\partial S\}. Entonces se tiene
u(x,y)=E[\tau_{(x,y)}].

La idea de la demostración es aplicar la fórmula de It\^ o (ver (2) o (3)) al proceso $u(X_s)$, donde $X_s$ es un movimiento browniano, obteniendo la fórmula siguiente tras tomar esperanzas

E[u(X_{\tau_{(x,y)}})]-E[u(x,y)]=E\bigg{[}\int_0^{\tau_{(x,y)}}\Delta u(X_s)ds\bigg{]}.

Ahora usamos las condiciones de borde y la ecuación para obtener
0-u(x,y)=-E\bigg{[}\int_0^{\tau_{(x,y)}}1ds\bigg{]}=-E[\tau_{(x,y)}], concluyendo la demostración.

Una vez que tenemos t solución de la ecuación de Poisson anterior lo que hacemos es definir nuevas funciones \Phi(x)=u(x)+|\nabla u(x)|^2 y y \Psi(x)=-\nabla\cdot\bigg{(}\frac{\nabla u}{|\nabla u|}\bigg{)} (entre otras). La función Phi tiene ciertas propiedades que la hacen interesantes, pero para el tratamiento de imágenes lo más importante es que los valores altos de \Phi indican concavidades (allí el gradiente es grande) y que podemos utilizar el método del umbral para dividir nuestra forma en partes sin perder información. La función Psi (cuyo operador es el 1-Laplaciano) tiene la propiedad de que ciertos valores se alcanzan en zonas curvadas. Por lo tanto sirve para encontrar esquinas en nuestra forma. Los valores negativos de \Psi indican concavidades. Cuanto más negativo más ‘picuda’ es la concavidad. Al reves también funciona, los valores altos indican convexidades. Así extraemos información de la imagen y el ordenador puede discernir entre ellas.

Para el lector familiarizado con Matlab dejamos un código. Con estas funciones se puede experimentar un poquito lo que hemos estado diciendo.

function [img,img2,u,t,cnt]=imagessor(tol,itmax,image)
%this program use the sor method for solve the poisson equation in a silhouette
%tol is the tolerance
%itmax is the maximum number of iterations
%image is an png image.
%Rafael Granero Belinchon

tic
img=imread(image);
figure;imagesc(img);
input(‘Press any key’)
img=double(img);
[H,W]=size(img);
w= 2 / ( 1 + sin(pi/(H+1)) );%our overrelaxation parameter
for i=1:H
for j=1:W
img2(i,j)=abs(img(i,j)-255); %change white for black and viceversa
end
end
img2;
figure; imagesc(img2);
input(‘Press any key’)
clear i,j;
%now we start with the algorithm. Like maybe it will be difficult put the geometry of the silhouette
%we use the easy bounday conditions to treat all the image, but we only solve the poisson inside the silhouette.
%This maybe is not efficiently, but is easier.
u=img2;
v=u;
err=1;
cnt=0;
while((err>tol)&(cnt<=itmax))
for i=2:H-1
for j=2:W-1
if (img2(i,j)==0)

else
v(i,j)=u(i,j)+w*(v(i-1,j) + u(i+1,j) + v(i,j-1) + u(i,j+1) +1 – 4*u(i,j))/4;
E(i,j)=v(i,j)-u(i,j);
end
end
end
err=norm(E,inf);
cnt=cnt+1;
u=v;
end
u=flipud(u);
figure;imagesc(u);
mesh(u)
t=toc;

function [Phi,t]=phi(u,NGu)
%This program calculate the function phi=u+NGu^2
%NGu is the norm of the gradient of u
%Rafael Granero Belinchon

tic
[H,W]=size(NGu);
for i=1:H
for j=1:W
Phi(i,j)=u(i,j)+NGu(i,j)^2;
end
end
t=toc;

function [Psi,t]=psiimages(u,Gux,Guy,NGu)
%This program calculate the function psi=-div(gradient(u)/norm(gradient(u))
%NGu is the norm of the gradient of u
%Gux is the first component of the gradient,
%Guy is the second one
%Rafael Granero Belinchon

tic
[H,W]=size(NGu);
for i=2:H
for j=2:W
Psix(i,j)=((Gux(i,j)-Gux(i-1,j))*NGu(i,j)-Gux(i,j)*(NGu(i,j)-NGu(i-1,j)))/NGu(i,j)^2;
Psiy(i,j)=((Guy(i,j)-Guy(i,j-1))*NGu(i,j)-Guy(i,j)*(NGu(i,j)-NGu(i,j-1)))/NGu(i,j)^2;
Psi(i,j)=-Psix(i,j)-Psiy(i,j);
end
end
t=toc;

function [Gux,Guy,NGu,t]=gradient(u)
%This program calculate the gradient and its norm
%Gux is the first component of the gradient,
%Guy is the second one
%NGu is the norm of the gradient
%Rafael Granero Belinchon

tic
[H,W]=size(u);
for i=2:H
for j=2:W
Gux(i,j)=u(i,j)-u(i-1,j);
Guy(i,j)=u(i,j)-u(i,j-1);
NGu(i,j)=(Gux(i,j)^2+Guy(i,j)^2)^0.5;
end
end
t=toc;

(1) L.Gorelick, M.Galun, E.Sharon, R.Basri, A.Brandt, ‘Shape Representation and Classification Using the Poisson Equation’, IEEE transaction on pattern analysis and machine intelligence, 28 (2006), no.12, 1991-2004.

(2) H.Kunita, Stochastic differential equation and stochastic flows of diffeomorphism, Lecture Notes in Math. vol 1097, Springer, 1984.

(3) H.Kunita, Stochastic flows and stochastic differential equations, Cambridge studies in advanced mathematics, 1997.

¿Podemos ir hacia atrás (matemáticamente) en el tiempo?

Me comentó David que sería interesante que explicase un poquito de lo que significa la reversibilidad temporal desde el punto de vista de las ecuaciones en derivadas parciales (EDPs de ahora en adelante). Es decir, sin mencionar nada de entropías. Este es un tema muy interesante e importante aunque a primera vista parezca una tontería. Lo hemos puesto como una serie de dos entradas. La primera (esta que estás leyendo) presentará las EDPs más fáciles y estudiará sus propiedades de cara a la reversibilidad temporal. En la segunda veremos la derivación de unos modelos más complicados y trataremos de entender dónde aparece la irreversibilidad temporal. Lo cierto es que en cierto modo es llamativo, pues las leyes de Newton son reversibles en tiempo y muchas (casi todas) de las ecuaciones de las que hablaremos surgen de ellas.

Viendo qué ocurre:
Para entender qué quiere decir y qué implica la reversibilidad (o irreversibilidad) temporal hemos de comprender primero los ejemplos más básicos de EDPs. Como dato para los técnicos supondré que todos los problemas están puestos para (t,x)\in [0,T]\times\mathbb{R}. Inmerso en el texto hay imágenes .jpg, imágenes animadas .gif (pinchad en ellas para que empiecen a moverse) y código Matlab (¡usadlo si podéis!).

La ecuación del transporte:

Comenzaremos con la ecuación del transporte unidimensional con coeficientes constantes. Esta es la EDP más sencilla que podemos poner.

\partial_t u + c \partial_x u=0, u(0,x)=f(x).

Supondremos que f es una función derivable con derivada continua una vez. La solución de esta ecuación es u(t,x)=f(x-ct) (¡comprobadlo!). Esta ecuación se llama ‘del transporte’ porque lo que hace es eso ‘mueve’ nuestra distribución inicial f. Si queremos cambiar el sentido del tiempo hemos de hacer el cambio t por -t. Entonces la nueva ecuación es

-\partial_t u + c \partial_x u=0, u(0,x)=f(x).

Observamos que el cambiar el tiempo de sentido es equivalente a cambiar el signo de c. Si utilizamos el código que propongo con varios valores de c observamos que este parámetro es una velocidad. Por lo tanto, parece natural que cambiar el sentido del tiempo cambie el sentido del movimiento. Es decir, que si para c>0 íbamos a la derecha, para tiempos negativos (o equivalentemente -c) tenemos que ir a la izquierda. Concluímos así que la ecuación del transporte es reversible en tiempo y que la reversibilidad es muy natural si partimos del proceso físico que se modela con esta ecuación.


Otra consecuencia, ésta mucho más sutil, de la reversibilidad temporal es que nuestra solución NUNCA va a ser mejor que nuestro dato inicial f. Esto es obvio en este caso porque tenemos una solución explícita, pero es cierto en general. Si u tuviese más derivadas que f entonces dando la vuelta al tiempo tendríamos una contradicción.

function [u,x,t]=transporte(dx,dt,f,c)
%%
%Funcion que me aproxima la solucion exacta (conocida) de la
%ecuacion del transporte u_t+cu_x=0 con dato inicial
% u(0,x)=f(x), paso espacial dx y paso temporal dt.
%f sera una funcion
% Rafael Granero Belinchon
%%

%Definicion de parametros:
T=10; %El tiempo final
t=0:dt:T; %el vector de tiempos
x=-pi:dx:pi; %el vector de espacio donde queremos
%nuestra aproximacion. No necesitamos condiciones de borde ¿por que?
u=zeros(length(x),length(t));
F=feval(f,x);

%Calculo de la solucion:
%La solucion del problema anterior es u(x,t)=f(x-ct)
u(:,1)=F;
for j=2:length(t)
u(:,j)=feval(f,x-c*t(j));
plot(x,u(:,j-1));%Representacion de los resultados
drawnow
end

function f=prueba(x)
f=sin(x);


La ecuación de ondas:

La siguiente ecuación es el paradigma de ecuación hiperbólica. Me refiero a la ecuación de ondas. Viendo el nombre está claro qué proceso físico quiere describir ¿no?.

Esta ecuación se escribe

\partial_t ^2 u= c^2\partial_x^2 u, u(0,x)=f(x), \partial _t(0,x)=g(x).

Visualmente parece mucho más complicada que la ecuación del transporte… sin embargo en realidad es igual (al menos en un cierto sentido). Vamos a escribirla como un sistema. Para ello definimos el sistema

\partial_t u=c\partial_x v, \partial_t v=c\partial_x u.

Si ahora derivamos en tiempo la ecuación para \partial_t u y utilizamos la segunda ecuación obtenemos

\partial_t^2 u=c\partial_x \partial_tv=c^2\partial_x ^2 u.

Es decir, que la ecuación de ondas no es más que dos transportes acoplados. Sin embargo todavía podemos hacerlo mejor. Podemos darnos cuenta de que el operador diferencial se puede escribir como

\partial_t^2-c^2\partial_x^2=(\partial_t + c\partial_x)(\partial_t-c\partial x),

y por lo tanto si tenemos u=u_1+u_2 con

\partial_t u_1 + c\partial_x u_1=0; \partial_t u_2 - c\partial_x u_2=0

tenemos una solución de la ecuación original. Concluímos que, como la ecuación del transporte era reversible, la ecuación de ondas, que se puede escribir como un par de ecuaciones del transporte debe ser reversible también.

La ecuación del calor:

Esta ecuación es parabólica. Se escribe

\partial_t u= \partial_x^2 u, u(0,x)=f(x).

Visualmente parece estar a medio camino entre la ecuación del transporte y la ecuación de ondas, sin embargo su comportamiento en radicalmente distinto. Para convencernos de ello podemos ‘jugar’ un poco con el código Matlab que adjunto. Los datos iniciales por defecto son los mismos, pero os animo a cambiarlos.

function [u,x,t,mx]=heatff(N,dt,K)
%%
%Funcion que me aproxima la solucion de la
%ecuacion del calor con dato inicial seno
%con condiciones periodicas (para usar FFT)
%N es el numero de nodos espaciales que se quieren
%usar. dt es el paso temporal que se quiere.
%K es la constante de difusion.
%Devuelve el espacio, el tiempo, la aproximacion de
%la solucion y el maximo de dicha solucion en cada tiempo
%Rafael Granero Belinchon
%%
T=5;%Tiempo final
dx=2*pi/(N-1);
x=-pi:dx:pi;%Espacio
t=0:dt:T;%Tiempo
uo=sin(x);%dato inicial
for k=1:N/2 %Operador laplaciano en espacio de fourier
L(k)=(k-1)*(k-1);
L(k+N/2)=(N/2-k+1)*(N/2-k+1);
end
L=K*L;
u(:,1)=uo’;
mx(1)=max(uo);
for l=1:length(t)
u(:,l+1)=ifft(exp(-L*dt*l).*fft(uo))’;%solucion
mx(l+1)=max(u(:,l+1));%Evolucion del maximo
plot(x,u(:,l));axis([-pi,pi,-1,1]);%Representacion de los resultados
drawnow
end
end

Para estudiar esta ecuación vamos a utilizar la transformada de Fourier. Para la transformada de Fourier de u(x) usaremos la notación \hat{u}(k). Así si transformamos la ecuación en espacio obtenemos las ecuaciones diferenciales ordinarias (EDOs a partir de ahora) indexadas en la longitud de onda k siguientes

\frac{d}{dt}\hat{u}(t,k)=-k^2\hat{u}(t,k), \hat{u}(0,k)=\hat{f}(k).

Esta ecuación la podemos resolver explícitamente

\hat{u}(t,k)=e^{-k^2t}\hat{f}(k).

Observemos ahora qué quiere decir el cambio del sentido del tiempo. De nuevo hagamos el cambio t por -t. La ecuación nos queda

\partial_t u= -\partial_x^2 u, u(0,x)=f(x).

No se ve nada claro, sin embargo, si buscamos los efectos del cambio en la solución explícita tenemos

\hat{u}(t,k)=e^{k^2t}\hat{f}(k),

de manera que cuando invirtamos la transformada de Fourier estamos calculando una convolución con una función que no está acotada, ni tiene ninguna potencia integrable… Vamos, que nuestra solución (que existe explícitamente) no está en ningún espacio razonable ni con propiedades físicas razonables. Por ejemplo, si u es la temperatura, entonces su integral (que es el calor) debe ser finita. Pues si damos la vuelta al tiempo obtenemos calor infinito para cualquier tiempo. Concluímos que la ecuación del calor NO es reversible en tiempo.

Una propiedad que a veces se da en las ecuaciones irreversibles y que es bien interesante es el ‘efecto regularizante’. Es decir, tu dato inicial f es continuo (por ejemplo), pero tu solución u es infinitamente derivable para todo tiempo (positivo). Como ya hemos mencionado antes, este comportamiento difiere del de las ecuaciones hiperbólicas usuales. La prueba de esto se puede hacer sin más que multiplicar por u e integrar por partes en espacio (¡comprobadlo!). Después basta observar que la ecuación es invariante por derivación tanto en tiempo como en espacio (¡Concluid el argumento!).

Vistos estos 3 ejemplos parece que hay una relación entre la ‘simetría’ del problema y su reversibilidad temporal. Quiero decir que, al menos de momento, las ecuaciones que tienen el mismo número de derivadas temporales que espaciales han resultado ser reversibles, mientras que las que no las tienen son irreversibles.

Otra cosa que se nos puede ocurrir es que las ecuaciones reversibles sean las que ‘no tiendan a nada’. Así vemos que la ecuación del calor tiende a ser idénticamente cero (necesita tiempo infinto para llegar a serlo) mientras que la ecuación del transporte sólo se movía por el espacio.

Veamos otro ejemplo:

La ecuación de Schrödinger:

Esta ecuación, clave en mecánica cuántica, se escribe

\partial _t u= i\partial_x^2 u, u(0,x)=f(x).

Si repetimos el análisis que hicimos para la ecuación del calor obtenemos que la solución es

\hat{u}(t,k)=e^{-ik^2t}\hat{f}(k),

que tiene un comportamiento oscilatorio. Por lo tanto, pese a tener una derivada en tiempo y dos en espacio se parece más a una ecuación de ondas que a una ecuación del calor. Observamos que el hecho de que aparezca la unidad imaginaria hace que u no sea real, sino compleja. Por lo tanto tiene una función conjugada. Si ahora cambiamos el sentido del tiempo observamos que para la función conjugada \bar{u} la ecuación es la misma. Por lo tanto si u es nuestra solución con el tiempo hacia delante, \bar{u} es una solución con el tiempo hacia atrás. Por lo tanto la ecuación de Schrödinger es reversible. Este ejemplo desmonta la hipótesis de que als reversibles debían tener el mismo número de derivadas en espacio y en tiempo.

function [u,x,t,L2,mx]=schrodinger(N,dt)
%%
%Funcion que me aproxima la solucion de la
%ecuacion de schrodinger con dato inicial seno
%con condiciones periodicas (para usar FFT)
%N es el numero de nodos espaciales que se quieren
%usar. dt es el paso temporal que se quiere.
%Devuelve el espacio, el tiempo, la aproximacion de
%la solucion, la norma L^2 de dicha solucion en cada tiempo
%y el maximo de la solucion en todo tiempo.
%Rafael Granero Belinchon
%%
T=5;%Tiempo final
dx=2*pi/(N-1);
x=-pi:dx:pi;%Espacio
t=0:dt:T;%Tiempo
uo=sin(x);%dato inicial
for k=1:N/2 %Operador laplaciano en espacio de fourier
L(k)=(k-1)*(k-1);
L(k+N/2)=(N/2-k+1)*(N/2-k+1);
end
L=i*L;
u(:,1)=uo’;
L2(1)=norm(uo)*dx;
mx(1)=max(abs (uo));
for l=1:length(t)
u(:,l+1)=ifft(exp(-L*dt*l).*fft(uo))’;%solucion
L2(l+1)=norm(u(:,l+1))*dx;%Evolucion de la norma L^2
mx(l+1)=max(abs(u(:,l+1)));%Evolución del máximo
plot(x,real(u(:,l)));axis([-pi,pi,-1,1]);%Representacion de los resultados
drawnow
end
end

Como dato anécdotico de esta ecuación hacemos notar que no puede reflejar efectos relativistas (¿por qué?).

En la próxima entrada, enlazando con esta, trataré la derivación desde la mecánica hamiltoniana de los modelos que se utilizan en mecánica de fluidos y trataré de explicar dónde aparece la irreversibilidad en el proceso. Sin embargo, esto es algo que no está ‘completamente entendido’ todavía.

La teoría del caos y el efecto mariposa

Para empezar sólo la voy a llamar teoría del caos en el título. Era para captar al atención, y este nombre lo consigue.  Es mejor decirle ‘de los sistemas dinámicos’ o algo así. Por desgracia, la fama de todo esto ha hecho que se encuentre de todo en internet. Por ejemplo hoy he visto una página donde se afirmaba que el efecto mariposa era los efectos de… ¡viajar en el tiempo! Impresionante. Y es que aficionarse a la ciencia está bien, pero sin perder el norte.

Por el nombre (caos) hay gente que piensa que un comportamiento caótico es aleatorio e impredecible. Vamos, un cisco bueno. Lo cierto es que lo primero es falso y lo segundo, como casi siempre, es ‘depende’.

El caos es ‘determinista‘, que quiere decir que dado un estado inicial, el comportamiento a largo plazo está determinado sin error posible y es único. Esto es, que está ‘determinado’ por el estado inicial. Consideremos un sistema discreto, es decir, una ley de recurrencia, por ejemplo la también famosa ley de Fibonacci, pero sin estados iniciales. Entonces la dinámica (la ley que sigue el sistema) es f_n=f_{n-1}+f_{n-2} Dados dos estados iniciales, por ejemplo 1,1 conocemos todos los valores de f. Además, si realizamos el experimento dos veces con los mismos valores iniciales los resultados serán idénticos. Eso quiere decir determinista.

Diferentes son los sistemas probabilistas. En estos sistemas hay un componente azaroso que impide conocer el largo plazo. Pero lo que de verdad los caracteriza es que para el mismo dato inicial podemos obtener resultados de los experimentos completamente distintos. Por ejemplo (muy poco válido como veremos ahora), una moneda. Consideramos el experimento tirar una vez la moneda. A mismas condiciones unas veces saldrá cara y otras cruz. Digo que es un mal ejemplo, porque este modelo es probabilista sólo por nuestro desconocimiento, pues si conociésemos la dirección y la fuerza exactas del lanzamiento sabríamos si saldrá cara o cruz. La gravedad es determinista. Esto nos podría llevar a pensar hasta que punto existe el azar, o si puede ser la probabilidad sólo una herramienta útil dada nuestra ignoracia de la realidad completa. Pensar en un mundo completamente determinista ya lo hizo Laplace. Y tiene una frase famosa por ello.

Ya hemos entendido la palabra determinista (si no es así tenéis que releerlo). Veamos el ‘depende’.

Es aquí donde entra el ‘efecto mariposa‘, que es el nombre que le puso Edward Lorenz a la sensibilidad a los datos iniciales. ¿A que es exótico?. Creo que su idea era atraer la atención hacia su conferencia. El efecto mariposa viene a decir que cualquier cambio minúsculo acaba teniendo repercusiones enormes, y por lo tanto nuestra aproximación (predicción) será una chapuza completa. O exóticamente

Si una mariposa batiese sus alas en Pekín provocaría un tornado en Texas un mes siguiente.

O algo parecido. Bueno, no matéis a todas las mariposas para evitar los tornados. No hay que cogerlo tan literal. En realidad hay que hacer una interpretación de casi todo. Las mariposas no provocan tornados. Los tornados surgen de un conjunto de factores que los hacen posibles, esto es, todas las mariposas del mundo, nuestros aviones, nosotros corriendo, la humedad en mi pueblo… Ahora, si pudiesemos tener dos planetas Tierra, con exactamente las mismas condiciones salvo una mariposa, entonces los climas serían distintos. ¿En qué sentido (ahora viene el depende)?. Bueno, no distintos en el sentido de que en Valencia helase por las noches. Llamemos a este tipo de cambios bruscos cambios de tipo 1. No, serían cambios en el orden y en el tiempo (tiempo-temporal, no tiempo-clima). Por ejemplo, un tornado que apareciese en un planeta el día 1 de Julio en el otro no aparecería y aparecería uno el 18 de Agosto. O una tormenta en mi pueblo no caería, caería en Albaladejo. Estos son los cambios de tipo 2.

Los cambios de tipo 1 son cambios bruscos que no quiere nadie. Estos cambios van asociados a cambios muy profundos en el sistema. Ahora tengo que ponerme técnico, lo siento. En un sistema dinámico, hay asociado un espacio de fases, que es un sitio donde viven las características del sistema. En este lugar de posiciones y velocidades (si es físico el sistema) o en el caso del clima de humedades y temperaturas, existen ‘cosas’ que atraen. Además son cosas raras normalmente en los casos caóticos. De hecho son fractales. Como no tenían muchas ganas de buscar un nombre exótico los llamaron ‘atractores extraños’. Posee la virtud de la simpleza. Los comportamientos del sistema cambian bruscamente entre unos atractores y otros (el mismo sistema puede tener varios al variar los parámetros). Es decir, para seguir con el ejemplo del clima, tenemos nuestro porcentaje de CO2 en la atmósfera en un nivel x. Nuestro sistema entonces tiene x como un parámetro. Si aumenta el porcentaje, digamos a 2x entonces nuestro sistema cambia de parámetro, pudiéndose producir un cambio de atractor, con el consiguiente nevazo en la Malvarrosa. Podemos ver esto del plano de fases y los atractores como un par de platos hondos y una aceituna, tenemos los platos juntos de manera que la aceituna reposa en el borde de ellos. La aceituna caerá rodando a uno de ellos. Los platos son los atractores, el conjunto de los dos es el espacio de fases y nuestra aceituna es el estado del sistema.

Dicho esto, está claro que hay que evitar los cambios de tipo 1. Los de tipo 2 son mejores en general.

Resumiendo, si tenemos un estado inicial, este nos viene dado por un conjunto de mediciones que hemos hecho. Estas mediciones no tienen (ni pueden) tener una precisión infinita (en cuyo caso el estado del sistema estaría determinado siempre) por lo que aparecen pequeños errores entre nuestro estado inicial para realizar los cálculos y la predicción y el verdadero estado inicial. Es decir, en nuestro espacio de fases hay dos puntos distintos, el de las medidas y el real. Al ser el comportamiento caótico, al avanzar el tiempo las curvas que tracen estos puntos se separarán. Y consecuentemente nuestra predicción a largo tiempo fallará.

Concluyendo, el ‘depende’ significa que podemos predecir el corto (quizá muy corto) plazo con poco error y podemos predecir si habrá cambio de atractor o no. Esto es comparable a decir que en Cuenca en Julio hará calor pero no poder decir habrá 36º C a las 15 de la tarde del día 2 de Julio. Decir que hará calor es decir el atractor, decir la temperatura exacta a la hora cabal es una predicción a largo plazo.

El comportamiento caótico existe, además es muy común. Aparece en todas las ramas del saber, física, biología medicina… Necesita algunas cosas para que se pueda dar. El sistema de ecuaciones diferenciales ha de ser no lineal y tener una dimensión mayor que dos. Pero esto no es nada raro en la cruda realidad fuera de las ‘oscilaciones pequeñas’ y cosas por el estilo.

He hecho un programita en Matlab para ver la sensibilidad a los datos iniciales:

function [x1,y1,z1,Y1,x2,y2,z2,Y2]=caoslogistica
%Este codigo estudia varios casos de 2 sistemas dinamicos discretos
%que conducen a un comportamiento caotico para ciertos valores
%de un parametro. Asi mismo dibuja unos diagramas de bifurcacion.
%Para el primer caso se puede poner k=4 para ver el comportamiento
%caotico. Para el segundo se puede poner k=1.6.
%Rafael Granero Belinchon.

disp(‘Comenzamos con el sistema dinamico Xn+1=k1Xn(1-Xn)’)
disp(‘—Primer Experimento:—‘)
k1=input(‘Dame una constante entre 0 y 4:’);
x0=input(‘Dame un valor inicial entre 0 y 1:’);
x1(1)=x0;
for i=1:100
x1(i+1)=k1*x1(i)*(1-x1(i));
end
disp(‘—Segundo Experimento:—‘)
k2=input(‘Dame una constante entre 0 y 4:’);
y0=input(‘Dame un valor inicial entre 0 y 1:’);
y1(1)=y0;
for i=1:100
y1(i+1)=k2*y1(i)*(1-y1(i));
end
disp(‘—Tercer Experimento:—‘)
k3=input(‘Dame una constante entre 0 y 4:’);
z0=input(‘Dame un valor inicial entre 0 y 1:’);
z1(1)=z0;
for i=1:100
z1(i+1)=k3*z1(i)*(1-z1(i));
end
subplot(4,1,1)
plot(x1);title(‘Primer experimento’);
subplot(4,1,2)
plot(y1);title(‘Segundo experimento’);
subplot(4,1,3)
plot(z1);title(‘Tercer experimento’);
subplot(4,1,4)
plot(z1,’r’);
hold on
plot(x1);
hold on
plot(y1,’k’);title(‘Todos juntos’);
hold off
a=input(‘Presiona cualquier tecla para continuar:’);
clear a;
disp(‘Comenzamos con el sistema dinamico Xn+1=k1Xn^2-1’)
disp(‘—Primer Experimento:—‘)
k1=input(‘Dame una constante entre 0 y 4:’);
x0=input(‘Dame un valor inicial entre 0 y 1:’);
x2(1)=x0;
for i=1:100
x2(i+1)=k1*x2(i)^2-1;
end
disp(‘—Segundo Experimento:—‘)
k2=input(‘Dame una constante entre 0 y 4:’);
y0=input(‘Dame un valor inicial entre 0 y 1:’);
y2(1)=y0;
for i=1:100
y2(i+1)=k2*y2(i)^2-1;
end
disp(‘—Tercer Experimento:—‘)
k3=input(‘Dame una constante entre 0 y 4:’);
z0=input(‘Dame un valor inicial entre 0 y 1:’);
z2(1)=z0;
for i=1:100
z2(i+1)=k3*z2(i)^2-1;
end
figure
subplot(4,1,1)
plot(x2);title(‘Primer experimento’);
subplot(4,1,2)
plot(y2);title(‘Segundo experimento’);
subplot(4,1,3)
plot(z2);title(‘Tercer experimento’);
subplot(4,1,4)
plot(z2,’r’);
hold on
plot(x2);
hold on
plot(y2,’k’);title(‘Todos juntos’);
hold off
a=input(‘Presiona cualquier tecla para continuar:’);
clear a;
disp(‘Vamos a dibujar ahora un diagrama de bifurcacion para el primer sistema’)
K=0:0.01:4;
X=zeros(length(K),5000);;
X(:,1)=0.3;
for j=1:length(K);
for i=1:5000
X(j,i+1)=K(j)*X(j,i)*(1-X(j,i));
end
end
Y1=X(:,4000:end);
figure
plot(Y1);title(‘Diagrama de bifurcacion para el primer sistema’)
a=input(‘Presiona cualquier tecla para continuar:’);
clear a;
disp(‘Vamos a dibujar ahora un diagrama de bifurcacion para el segundo sistema’)
K=0:0.01:4;
X=zeros(length(K),5000);
X(:,1)=0.3;
for j=1:length(K);
for i=1:5000
X(j,i+1)=K(j)*X(j,i)^2-1;
end
end
Y2=X(:,4000:end);
figure
plot(Y2);title(‘Diagrama de bifurcacion para el segundo sistema’)

Primer experimento (k=4)

La diferencia entre los datos iniciales es de 0.01 entre el de arriba y el segundo y de 0.001 entre el primero y el tercero. Como se puede ver en la gráfica de abajo, las trayectorias se separan más o menos por llegado un tiempo, pero al principio iban bien juntitas. Además podemos ver que todas estan en el mismo atractor. Eso se ve por los ‘patrones’ característicos que tienden a producirse. Me refiero a las oscilaciones grandes seguidas de varias muy pequeñas.  Esto se entiende fácil si se imagina uno nuestro estado del sistema como una mosca cansina. Estará dando vueltas a tu alrededor, quizá de forma complicada, pero antes o despues va a volver a pasar por tu oreja, quizá no como la vez anterior, pero muy cerca. Eso es lo que produce estos patrones. Que nuestro estado pasa cerca de una cierta parte del atractor.

Segundo experimento (k=1.6)

Arriba se muestran los resultados de ejecutar el código poniendo k=4 para el primer sistema y k=1.6 para el segundo. Veamos cómo cambia el carácter de la solución al mover k:

Otra cosa que resultaba ‘rara’ del comportamiento caótico era que reglas aparentemente muy sencillas (como puede ser elevar al cuadrado y restar 1) daban comportamientos muy complicados. También ocurre al revés, reglas aparentemente complicadas dan comportamiento simple.

Quizá otro día hable del sistema de Lorenz y de su atractor famoso.