Ante la duda, aplicar Fourier

Introducción

Un clásico problema para explicar el poder del principio de superposición y de la simetría consiste en calcular la resistencia entre los puntos A y B de la siguiente red infinita de resistores:

Red infinita de resistores unitarios con dos nodos marcados.

La forma más simple de resolverlo es asumir que inyectamos una corriente de 1 por A, dejando desconectados los otros nodos. Por simetría, las corrientes que partan del nodo serán todas iguales a 1/4:

Se inyecta una corriente unitaria en el nodo A de la red anterior.

Por linealidad y simetría, si repetimos el procedimiento inyectando una corriente de -1 por el nodo B, las corrientes que partan del mismo serán iguales a -1/4. Aplicando el principio de superposición (posible por la linealidad de la Ley de Ohm), llegamos a las siguientes corrientes:

Superposición de los efectos de inyectar una corriente unitaria por el nodo A y extraer una corriente unitaria por el nodo B.

Como esto equivale a inyectar una corriente de 1 por A y extraerla por B, la diferencia de potencial entre ambos nodos será idéntica a la resistencia entre estos. La corriente que circula por el resistor unitario que los une es 1/2 y, por lo tanto, la resistencia entre A y B es 1/2.

Una variante de este problema (considerablemente más compleja) que ha aparecido en múltiples lugares (incluso XKCD) es la siguiente:

Red de resistores unitarios con los nodos A y B separados por un 'salto de caballo'.

En lo que resta del post veremos como obtener una solución numérica y, finalmente, una analítica a este problema.

Una solución numérica

Un nodo cualquiera de la red de resistores debe satisfacer la ley de Kirchhoff de conservación de corrientes. Como las corrientes a través de cada resistor unitario son iguales a la diferencia de tensión, tenemos:

(V_{i\,j} - V_{i-1\,j}) + (V_{i\,j} - V_{i+1\,j}) + (V_{i\,j} - V_{i\,j-1}) + (V_{i\,j} - V_{i\,j+1}) = 0

4V_{i\,j} - V_{i-1\,j} - V_{i+1\,j} - V_{i\,j-1} - V_{i\,j+1} = 0.

Estas ecuaciones se aplicarán a todos los nodos a excepción de los que estén conectados a fuentes externas. Si reemplazamos la red infinita de resistores por una red finita con N2 nodos, la aplicación de la ecuación de nodos nos dejará N2 – 2 ecuaciones, ya que la ecuación de nodos no se aplicará donde conectemos la fuente. Esta cantidad de ecuaciones es suficiente para determinar todas las tensiones, ya que las tensiones de dos nodos son forzadas por la fuente.

Utilizando una topología toroidal por simplicidad y aplicando Gauss Seidel + SOR con ω = 1.5 llegamos al siguiente código (ver resultados en codepad):

TOL = 1e-6
K = 1.5

def solve(n):
    assert n >= 4
    v = [[0.5 for y in range(n)] for x in range(n)]
    delta = 2 * TOL
    FIXED_VALUES = {
        (0, 0): 1,
        (2, 1): 0
    }
    while delta > TOL:
        delta = 0
        for x in range(n):
            for y in range(n):
                if (x, y) in FIXED_VALUES:
                    v[x][y] = FIXED_VALUES[(x, y)]
                    continue
                vo = v[x][y]
                vn = (v[x - 1][y] + v[(x + 1) % n][y] +
                      v[x][y - 1] + v[x][(y + 1) % n]) / 4.0
                v[x][y] = vn * K + vo * (1 - K)
                delta = max(abs(vn - vo), delta)
    return 1.0 / (4 * v[0][0] - v[-1][0] - v[1][0] - v[0][-1] - v[0][1])

if __name__ == '__main__':
    from time import time
    for n in (8, 16, 32, 64, 128):
        start = time()
        print 'N = %d - R = %f - Time: %f s' % (n, solve(n), time() - start)

Ejecutando el código completo (la versión de codepad excluye N = 64 y N = 128 por las limitaciones al tiempo de ejecución) obtenemos la siguiente salida:

N = 8 - R = 0.734997 - Time: 0.000000 s
N = 16 - R = 0.763460 - Time: 0.094000 s
N = 32 - R = 0.770537 - Time: 0.781000 s
N = 64 - R = 0.772408 - Time: 2.532000 s
N = 128 - R = 0.773033 - Time: 23.687000 s

Se observa una convergencia relativamente rápida a un valor cercano a 0.773 y un comportamiento bastante extraño del tiempo de ejecución.

Una solución analítica

Si llamamos Vi j a la tensión del nodo m, n e Im n a la corriente inyectada en el mismo, la conservación de la corriente nos lleva a lo siguiente:

I_{m\,n} = 4V_{m\,n} - V_{m-1\,n} - V_{m+1\,n} - V_{m\,n-1} - V_{m\,n+1}.

Las corrientes inyectadas pueden representarse como

I_{m\,n} = \delta_{m\,n} - \delta_{m-M\,n-N},

donde las “deltas” inyecta una corriente unitaria en el nodo 0, 0 y la extraen por el nodo M, N. Esta ecuación en diferencias no tiene una solución única por esencialmente el mismo motivo que el potencial de una carga puntual no tiene una única solución: el núcleo del laplaciano es no trivial. Pero hay una solución única si exigimos que el potencial se vaya a cero cuando m y n se van a infinito.

Un método muy utilizado para resolver ecuaciones diferenciales es aplicar una transformación inversible que convierta a la ecuación diferencial en una simple ecuación algebraica. Si esta última puede resolverse, aplicando la transformación inversa obtendremos una solución en el dominio original.

Si aplicamos la “versión adecuada” de la transformada de Fourier en dos dimensiones,

\displaystyle V(p,q) = \sum_{m=-\infty}^{+\infty}\sum_{n=-\infty}^{+\infty} V_{m\,n} e^{-i m p} e^{-i n q},

podemos ver que la transformada de Vm-1 n es

\displaystyle \sum_{m=-\infty}^{+\infty}\sum_{n=-\infty}^{+\infty} V_{m-1\,n} e^{i m p} e^{i n q} = \sum_{m=-\infty}^{+\infty}\sum_{n=-\infty}^{+\infty} V_{m\,n} e^{-i (m + 1) p} e^{-i n q}

\displaystyle = e^{-i p} \sum_{m=-\infty}^{+\infty}\sum_{n=-\infty}^{+\infty} V_{m\,n} e^{-i m p} e^{-i n q}

\displaystyle = e^{-i p} V(p, q).

Utilizando esto, llegamos a la siguiente ecuación algebraica sobre V(p, q):

\displaystyle 1 - e^{-i M p}e^{-i N q} = V(p, q) (4 - e^{-i p} - e^{i p} - e^{-i q} - e^{i q}).

Resolviéndola:

\displaystyle V(p, q) = \frac{1 - e^{-i M p}e^{-i N q}}{4 - 2 \cos p - 2 \cos q}.

Antitransformando:

\displaystyle V_{m\,n} = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - e^{-i M p}e^{-i N q}}{4 - 2 \cos p - 2 \cos q}e^{i m p}e^{i n q}

\displaystyle = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - e^{-i M p}e^{-i N q}}{4 - 2 \cos p - 2 \cos q}e^{i m p}e^{i n q}

\displaystyle = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{e^{i m p}e^{i n q} - e^{i (m - M) p}e^{i (n - N) q}}{4 - 2 \cos p - 2 \cos q}.

Pero a nosotros nos interesa la resistencia entre los nodos 0, 0 y M, N, igual a la diferencia de tensión entre ambos nodos (ya que circula entre ellos una corriente unitaria). Por lo tanto,

\displaystyle R_{M\,N} = V_{0\,0} - V_{M\,N}

\displaystyle = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - e^{-i M p}e^{-i N q} - e^{i M p}e^{i N q} + 1}{4 - 2 \cos p - 2 \cos q}

\displaystyle = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - e^{-i (M p + N q)} - e^{i (M p + N q)} + 1}{4 - 2 \cos p - 2 \cos q}

\displaystyle = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{2 - 2\cos(M p + N q)}{4 - 2 \cos p - 2 \cos q}

\displaystyle = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - \cos(M p + N q)}{2 - \cos p - \cos q}

Ahora “solo” resta resolver esta integral para cuando M = 2 y N = 1:

\displaystyle R_{2\,1} = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - \cos(2 p + q)}{2 - \cos p - \cos q}.

Evaluándola numéricamente obtenemos 0.7732, un valor que coincide en 3 cifras significativas con el obtenido previamente.

Solución analítica de la integral

ADVERTENCIA: gran cantidad de fórmulas que no aportan mucho…

Podemos empezar buscando una solución via Wolfram Alpha, pero no funciona. Entonces comenzamos expandiendo el numerador:

\displaystyle R_{2\,1} = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - \cos(2 p + q)}{2 - \cos p - \cos q}

\displaystyle = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - \cos 2p \cos q + \sin 2p \sin q}{2 - \cos p - \cos q}

Trabajando con el primer término,

\displaystyle A = \frac{1}{2 - \cos p}

\displaystyle \int_0^{2\pi} dq \frac{1}{2 - \cos p - \cos q} = \frac{1}{A^{-1}}\int_0^{2\pi} dq \frac{1}{1 - A\cos q},

llegamos a una forma en tabla (Tabla 64, Formula 12):

\displaystyle = 2A\int_0^{\pi} dq \frac{\cos 0\cdot q}{1 + (-A)\cos q}

Aplicando la fórmula y simplificando:

\displaystyle = 2A\frac{\pi}{\sqrt{1-A^2}}\left(\frac{\sqrt{1-A^2}-1}{-A}\right)^0

\displaystyle = \frac{2}{2 - \cos p}\frac{\pi}{\sqrt{\frac{(2 - \cos p)^2-1}{(2 - \cos p)^2}}}

\displaystyle = \frac{2}{2 - \cos p}\frac{\pi(2 - \cos p)}{\sqrt{(2 - \cos p)^2-1}}

\displaystyle = \frac{2\pi}{\sqrt{(2 - \cos p)^2-1}}

Del mismo modo podemos proceder con el segundo término:

\displaystyle \int_0^{2\pi} dq \frac{\cos 2p \cos q}{2 - \cos p - \cos q} = \frac{\cos 2p}{A^{-1}}\int_0^{2\pi} dq \frac{\cos q}{1 - A\cos q}

\displaystyle = A \cos 2p\int_0^{2\pi} dq \frac{\cos q}{1 - A\cos q}

\displaystyle = 2A\cos 2p\int_0^{\pi} dq \frac{\cos 1\cdot q}{1 + (-A)\cos q}

\displaystyle = 2A\cos 2p\frac{\pi}{\sqrt{1-A^2}}\left(\frac{\sqrt{1-A^2}-1}{-A}\right)^1

\displaystyle = -2A\cos 2p\frac{\pi}{\sqrt{1-A^2}}\frac{\sqrt{1-A^2}-1}{A}

\displaystyle = -2\frac{1}{2 - \cos p}\cos 2p\frac{\pi}{\sqrt{\frac{(2 - \cos p)^2-1}{(2 - \cos p)^2}}}\frac{\sqrt{\frac{(2 - \cos p)^2-1}{(2 - \cos p)^2}}-1}{\frac{1}{2 - \cos p}}

\displaystyle = -\frac{2\pi\cos 2p}{(2 - \cos p)\frac{\sqrt{(2 - \cos p)^2-1}}{2 - \cos p}}\frac{\frac{\sqrt{(2 - \cos p)^2-1}}{2 - \cos p}-1}{\frac{1}{2 - \cos p}}

\displaystyle = -\frac{2\pi\cos 2p}{\sqrt{(2 - \cos p)^2-1}}\left(\sqrt{(2 - \cos p)^2-1} - (2 - \cos p)\right)

\displaystyle = - 2\pi\cos 2p + \frac{2\pi\cos 2p(2 - \cos p)}{\sqrt{(2 - \cos p)^2-1}}

La integral del último término se anula, como puede verse a continuación:

\displaystyle \int_0^{2\pi} dq \frac{\sin 2p \sin q}{2 - \cos p - \cos q} = \frac{1}{A^{-1}}\int_0^{2\pi} dq \frac{\sin 2p \sin q}{1 - A\cos q}

\displaystyle = A\sin 2p \int_0^{2\pi} dq \frac{\sin q}{1 - A\cos q}

\displaystyle = A\sin 2p \int_0^\pi dq \frac{\sin q}{1 - A\cos q} - A\sin 2p \int_{2\pi}^\pi dq \frac{\sin q}{1 - A\cos q}

\displaystyle = A\sin 2p \int_0^\pi dq \frac{\sin q}{1 - A\cos q} + A\sin 2p \int_0^\pi dr \frac{\sin (2\pi - r)}{1 - A\cos (2\pi - r)}

\displaystyle = A\sin 2p \int_0^\pi dq \frac{\sin q}{1 - A\cos q} + A\sin 2p \int_0^\pi dr \frac{-\sin r}{1 - A\cos r}

\displaystyle = 0

Mediante estas integraciones, la integral doble original

\displaystyle R_{2\,1} = \frac{1}{4\pi^2} \int_0^{2\pi} dp \int_0^{2\pi} dq \frac{1 - \cos 2p \cos q + \sin 2p \sin q}{2 - \cos p - \cos q}

se reduce a una integral simple:

\displaystyle R_{2\,1} = \frac{1}{4\pi^2} \int_0^{2\pi} dp \frac{2\pi}{\sqrt{(2 - \cos p)^2-1}} - \frac{2\pi\cos 2p(2 - \cos p)}{\sqrt{(2 - \cos p)^2-1}} + 2\pi\cos 2p

\displaystyle = \frac{1}{2\pi} \int_0^{2\pi} dp \frac{1- 2\cos 2p + \cos p\cos 2p}{\sqrt{(2 - \cos p)^2-1}}.

Utilizando Wolfram Alpha:

\displaystyle R_{2\,1} = \frac{1}{2\pi} \int_0^{2\pi} dp \frac{1- 2\cos 2p + \cos p\cos 2p}{\sqrt{(2 - \cos p)^2-1}}

\displaystyle  = \frac{1}{2\pi} (8-\pi)

\displaystyle = \frac{4}{\pi} - \frac{1}{2}

\displaystyle \approx 0.7732,

coincidiendo con el resultado aproximado anterior.

Conclusiones y reconocimientos

Esto vindica, como Fer bien conoce, la importancia de aplicar Fourier cuando uno se encuentra frente a un problema que no sabe como resolver. 😛

Soluciones esencialmente idénticas a esta fueron desarrolladas mucho antes por las fuentes citadas y por “frooha”, que desarrolló una solución muy similar a esta, entre otros. También existe al menos una solución por la via experimental, preferida por los electrónicos.

Advertisement

Dinámica de fluidos en Javascript

Inspirado por un ejemplo portado por Oliver Hunt de C a JS (y frustrado porque no se me ocurría como resolver el nivel Ophanim en Manufactoria 😀 ), decidí portar mi código de simulación de fluidos mediante Lattice Boltzmann (LB) a Javascript y agregarle interactividad. La visualización es algo primitiva, ya que me concentré en optimizar los cálculos sin prestarle mucha atención a la optimización del manejo de canvas; posiblemente mejore ese aspecto en una próxima versión.

El código presenta algunas limitaciones propias de utilizar una grilla de 64 X 64 como base (el máximo tamaño con performance “realtime“) y, muy probablemente de mi desconocimiento sobre como optimizar los parámetros de LB. Es particularmente clara la compresibilidad del fluido y no es muy difícil hacer “explotar” la simulación (se recupera mediante un reset).

Como WordPress no permite incluir código Javascript en los posts, para visualizar la simulación pueden hacer click en la imagen de referencia de los controles.

Referencia de los controles de la simulación. Hacer click para arrancar la simulación.

El uso de los controles es muy simple:

  • Play/pause: arranca o detiene la simulación.
  • Reset: reinicia la simulación desde cero.
  • Visualization reset: reinicia la visualización, creando una nueva serie de partículas para marcar el movimiento del fluido (sin alterar el estado del mismo).

Para darle un impulso a una parte del fluido basta con arrastrar sobre el área de visualización.

En un posterior post incluiré detalles acerca de como funciona LB y de las optimizaciones realizadas (tengo que leer más, sobre todo respecto a la conexión con los valores físicos 😀 ).

Un problema de termos – Solución

[Continuación de Un problema de termos]

Una suposición implícita al resolver esta clase de problemas es que el estado del agua en el interior del termo puede describirse solo mediante su cantidad y su temperatura. Esto implica un estado de cuasi-equilibrio, lo que es razonable si se tiene en cuenta que el termo forma una barrera térmica a la interacción con el medio.

Evaluemos primero entonces el caso en que el tiempo transcurrido tiende a infinito (en lugar de las cinco horas especificadas en el problema). La temperatura del agua en el termo tenderá a la temperatura ambiente en ambos casos, por lo que es lógico que la temperatura final será menor en el segundo caso respecto al primero (en el segundo caso se mezclará un 90% de agua a temperatura ambiente con un 10% de agua a 80 °C, mientras que en el primero se mezclará un 90% de agua a 80 °C con un 10% de agua a temperatura ambiente).

Para evaluar el caso general podemos hacer algunas simplificaciones “evidentes” a primera vista:

  • La capacidad calorífica del agua es constante.
  • El trabajo efectuado sobre el agua es despreciable.
  • La capacidad calorífica del aire contenido en el termo es despreciable.
  • La pérdida de calor a través de las paredes del termo crece monótonamente cuando la temperatura del agua sube.
  • El termo pierde calor mientras la temperatura del contenido sea mayor a la externa.

Una simplificación menos evidente es suponer que la velocidad de pérdida de calor no depende de la cantidad de agua contenida. Pero es razonable si tenemos en cuenta que la pérdida de calor depende solo de la temperatura de la pared interior del termo y que el interior del termo puede considerarse en equilibrio térmico con dicha pared.

Llamemos q_1 a la cantidad de calor perdida en el primer caso (10% de agua remanente) y q_2 a la cantidad de calor perdida en el segundo caso (90% de agua remanente). Si llamamos T_{1f} y T_{2f} a las temperaturas finales correspondientes, M a la masa total de agua y C_e a su calor específico, tendremos:

T_{1f} = 0.1 \left( 80 - \frac{q_1}{0.1 M \cdot C_e} \right) + 0.9 \cdot 80 y

T_{2f} = 0.9 \left( 80 - \frac{q_2}{0.9 M \cdot C_e} \right) + 0.1 \cdot 80.

Simplificando:

T_{1f} = 0.1 \cdot 80 - 0.1 \frac{q_1}{0.1 M \cdot C_e} + 0.9 \cdot 80

T_{1f} = 80 - 0.1 \frac{q_1}{0.1 M \cdot C_e}

T_{1f} = 80 - \frac{q_1}{M \cdot C_e}

T_{2f} = 0.9 \cdot 80 - 0.1 \frac{q_2}{0.9 M \cdot C_e} + 0.1 \cdot 80

T_{2f} = 80 - 0.9 \frac{q_2}{0.9 M \cdot C_e}

T_{2f} = 80 - \frac{q_2}{M \cdot C_e}

Podemos ver que cual de las temperaturas sea mayor dependerá exclusivamente de cuanto calor se haya perdido y no de la fracción de agua remanente en el termo, excepto a través del efecto de esta fracción en las pérdidas de calor. El problema queda reducido entonces a determinar cual es la relación entre los valores de q_1 y q_2.

Si llamamos \dot{q}(T) al flujo de pérdida de calor del termo (dependiente por hipótesis solo de la temperatura), tendremos:

q_1 = \int_0^{5\,hs} dt\,\dot{q}(T_1(t)) y

q_2 = \int_0^{5\,hs} dt\,\dot{q}(T_2(t)).

Si escribimos las ecuaciones diferenciales de las temperaturas,

\dot{T_1}(t) = -\left(\frac{1}{0.1 M \cdot C_e}\right) \dot{q}(T_1(t)) y

\dot{T_2}(t) = -\left(\frac{1}{0.9 M \cdot C_e}\right) \dot{q}(T_2(t)),

podemos observar que solo difieren en una constante multiplicativa. Si definimos T_3(t) = T_2(9t), podemos ver que

\dot{T_3}(t) = \dot{T_2}(9t) \cdot 9 = -\left(\frac{9}{0.9 M \cdot C_e}\right) \dot{q}(T_2(9t)) = -\left(\frac{1}{0.1 M \cdot C_e}\right) \dot{q}(T_3(t)).

Como T_3 obedece la misma ecuación diferencial que T_1 y además cumplen con las mismas condiciones iniciales, podemos concluir que son idénticas. En consecuencia,

T_1(t) = T_2(9t).

Como ambas funciones son monótonamente decrecientes y como 9t > t para todo t positivo, sabemos que

T_1(t) < T_2(t).

Ahora, de acuerdo con las suposiciones anteriormente realizadas, eso implica que

\dot{q}(T_1(t)) < \dot{q}(T_2(t))

y, en consiguiente,

q_1 < q_2.

Finalmente, eso nos lleva a la conclusión supuesta en base a los resultados obtenidos bajo la condición t \rightarrow \infty:

T_{1f} > T_{2f}.

Un problema de termos

[Este es un problema inspirado por experiencias reales… ]

Partiendo de un termo lleno con agua a 80 °C, consideremos los dos escenarios siguientes:

  • Se consume el 90% del contenido del termo, se deja el termo por 5 horas y luego se completa al 100% con agua a 80 °C.
  • Se consume solo el 10% del contenido del termo, se deja el termo por las mismas 5 horas y luego se completa al 100% nuevamente con agua a 80 °C.

En cual de lo casos la temperatura final del agua será mayor? Qué suposiciones deben realizarse para llegar a esta conclusión? (Solo las difíciles de justificar, no cosas como “la temperatura de la habitación debe ser menor a 80 °C”… :-P)

Atracción entre los quarks

De las 3 partículas que constituyen la materia observables (protones, neutrones y electrones), al menos dos no son elementales. Desde los años 70 se conoce que tanto los neutrones como los protones están compuestos por tres quarks pero nunca se ha podido observar un quark libre.

Para explicar esto, se le asigna a cada quark llevaba una carga conocida como “color” (obviamente no tiene nada que ver con el concepto normal de color) tomando los valores rojo, verde o azul en los quarks y antirrojo, antiverde y antiazul en los antiquarks. Se postula un fenómeno denominado como confinamiento que solo permite observar libres a combinaciones “incoloras”, tales como rojo-verde-azul, rojo-antirrojo, etc. Las combinaciones de 3 quarks son denominadas bariones (siendo los protones los únicos bariones estables en estado libre) y las combinaciones quark-antiquark (todas inestables en estado libre) son denominadas mesones (piones, kaones, etc.).

Si bien no se ha conseguido hasta el momento una explicación completa del fenómeno del confinamiento, uno de los factores claves parece ser el hecho de que la atracción entre los quarks no disminuye con la distancia y tiene un valor grande incluso desde el punto de vista macroscópico: ~16 toneladas (!).

“Portal” y otros temas relacionados

Hace una semana terminé a Portal, uno de los pocos juegos de los que puedo decir eso (la mayoría me aburren rápido y nunca los termino).

Puede verse el concepto claramente en el trailer: consta de utilizar un “arma” que crea portales, que son básicamente conexiones entre puntos del espacio. Por razones de practicidad y jugabilidad solo se pueden crear en ciertas superficies, pero debo decir es la primera vez que veo un juego basado en espacios que no sean simplemente conexos.  (Nota: bueno, en realidad el Asteroids se jugaba en un espacio toroidal… digamos que es el primer juego que conozco basado en espacios tridimensionales múltiplemente conexos.)

En la realidad se desconoce si la creación de portales o “agujeros de gusano” (que siempre me pareció una traducción poco feliz del término wormhole) es posible en principio y, como es obvio, no tenemos la menor idea de como crearlos con tecnología remotamente a nuestro alcance. Pero se han realizado estudios teóricos bastante detallados de sus propiedades tales como Lorentzian Wormholes: From Einstein to Hawking, llevando a propuestas de buscar objetos con esas características (aunque desconozco si fue realizada alguna búsqueda).

La existencia de estos objetos en nuestro universo me parece algo dudosa, pero ciertamente ayudarían a realizar algunos de los sueños de la ciencia ficción 😀

Extra: para los que no piensan jugar al Portal o no les molestan los spoilers, los credits del juego en HQ (la voz pertenece a una computadora émula de HAL 9000).

Zenón 2.0 :-)

Una vela solar es un sistema propuesto de propulsión para naves espaciales que utiliza la presión que ejerce la luz solar sobre una membrana (generalmente reflectiva). Puede representarse mediante el siguiente esquema (dibujado por Randall Munroe, el autor de xkcd):
Obviamente, como todo sistema físico, una vela solar debe obedecer la conservación de la energía. Por lo tanto su energía cinética debe adquirirse a partir de una correspondiente reducción en la energía de la luz incidente. En efecto, esto es lo que sucede y, en el caso de una vela perfectamente reflectiva, el efecto Doppler reduce la longitud de onda de los fotones reflejados de modo que la energía se conserve.

El problema es el siguiente: cuando la vela está estacionaria, no hay efecto Doppler y la potencia transferida a la vela es nula; como puede entonces comenzar a moverse? (Hint: T = 1/2 mv2)

La respuesta a este problema y un análisis más exhaustivo del comportamiento energético de las velas solares en unos días…

Lattice Boltzmann (con SDL!)

Estoy trabajando en un nuevo proyecto personal: realizar una simulación de fluidos mediante el método conocido como Lattice Boltzmann y usando SDL para los gráficos. Si bien el objetivo último es lograr una buena performance, actualmente solo está funcionando la implementación “lenta” que voy a usar con propósitos comparativos (a unos 8 FPS con simple precisión en un Core Duo @ 2.16 GHz).

Hoy fue una experiencia bastante frustrante: empleé horas buscando un error en mi implementación de Lattice Boltzmann para descubrir finalmente que el problema estaba en las condiciones iniciales que estaba empleando… Más específicamente, no estaba cumpliendo con la condición CFL :-S

En las próximas semanas probablemente agregue algo más acerca de Lattice Boltzmann y, con suerte, tenga nuevos avances del proyecto.