El raytracinges el uso de modelos matemáticos para renderizar gráficos tridimensionales por ordenador, similares a la de cualquier videojuego actual. El siguiente grabado en madera ilustra que el método ya se usaba en el año 1525, reemplazando los cálculos matemáticos por un método más... artesanal:
"Hombre dibujando un Laúd" (Alberto Durero, 1525)
El grabado fue realizado por el artista renacentista alemán Alberto Durero. Se ve cómo un hombre va usando una cuerda tensada atada al extremo de un puntero para señalar puntos clave del objeto tridimensional a dibujar (un laúd). Mientras, otro hombre marca la intersección con un plano (el plano imagen se diría en fotografía o visión por computador) de la línea que representa esa cuerda.
Como curiosidad, el punto de la pared por donde la cuerda pasa por el cáncamo correspondería, matemáticamente, al punto focal de la cámara en un modelo proyecto tipo pin hole.
El grafeno es sin duda el material más "de moda" en los últimos años debido a sus potenciales usos, que aumentan casi cada mes con nuevos estudios teóricos. Con una sencilla estructura laminar de carbono de un único átomo de espesor, el estudio de algunas de sus sorprendentes propiedades les valió a Andre Geim y Konstantin Novoselov el Nobel de Física de 2010.
Pero, ¿sería posible construir una nanoestructura tan pequeña sin necesidad de complejos y caros instrumentos?. El siguiente vídeo (de Verisatium) te mostrará cómo hacerlo de la misma forma que lo hicieron los dos laureados de 2010: ¡con un simple lápiz y cinta adhesiva!
Cuando el profesor de Álgebra llega al capítulo de autovectores, es probable que muchos pensaran (¡o pensásemos!) algo como el título de esta entrada.
Honestamente, que el sufrido profesor le suelte a uno que, dada una matriz cuadrada A, queremos encontrar todos aquellos valores λ y vectores v que cumplen
A v = λ v
o equivalentemente
( A - λI ) v = 0
pues ciertamente, parece un problema entre tantos posibles, sacado de la manga con el único aparente objetivo de torturar a los alumnos de primer curso de cualquier carrera de ciencias o ingeniería.
Sin embargo, hay pocas herramientas tan extremadamente útiles como el cálculo de autovalores (los λ) y autovectores (los v) de una matriz. Me atrevería a decir que hay pocas ramas científicas y técnicas en las que el análisis de autovalores no tenga una aplicación en un tema fundamental, directa o indirectamente.
Para hacernos una idea, olvidémonos de las fórmulas de arriba. En cambio, veamos con ejemplos qué ocurre dependiendo de qué signifique la matrizA.
Imaginemos un cuerpo sólido, de casi cualquier tipo. Pues bien, si partimos el sólido en una serie finita de "trozos", podemos modelar cuánta masa tiene cada uno y cómo de "fuertemente unido" está a sus "trozos" vecinos. Haciendo esto sistemáticamente podemos formar con los primeros números una matriz de masas M y con los segundos una matriz de rigidez K. Usando un principio de elasticidad básico, podemos plantear la segunda Ley de Newton (aquello de F=ma) para todas las partes del sólido (con coordenadas x) y nos daría: \[ - \mathbf{K} \mathbf{x} = \mathbf{M} \ddot{\mathbf{x}} \]
Y ahora viene lo curioso: esta forma tan sencilla nos permite predecir con gran precisión cómo vibrará, y a qué frecuencias, cualquier objeto sólido. Operando, y llamando ω a las frecuencias, tenemos: \[ \mathbf{M}^{-1} \mathbf{K} \mathbf{x} = \omega^2 \mathbf{x} \]
Que no es más que un problema de autovalores, donde las λ del principio (autovalores) ahora son el cuadrado de las frecuencias (angulares) de resonancia del cuerpo y la matriz A es \(\mathbf{M}^{-1} \mathbf{K}\). Pero eso no es todo: los autovectores x además nos indican, para cada modo de vibración (para cada autovalor), de qué forma exacta se va a mover el cuerpo.
Mejor verlo con ejemplos. El primero, muy sencillo, corresponde al primer modo de vibración (al de frecuencia más baja, y por tanto, más fácil de excitar) de una viga metálica empotrada en una pared y con un extremo libre:
Primer modo de vibración de una viga empotrada en voladizo (créditos)
Pero como dije, exactamente el mismo método nos permite analizar cuerpos tan complejos como este modelo de una moto BMW K1200S. El siguiente vídeo muestra su modeo de vibración a 8Hz (¡tranquilos, está exagerada por 10000, sino no habría quien aguantase encima!):
Otra aplicación universal de los autovectores es determinar los ejes de un sistema de coordenadas a partir de una serie de datos. Dicho así, parece muy abstracto (¡y lo es!), así que veamos casos concretos.
Imagina que tomas una base de datos de fotos de caras de personas. Si se ordenan todos los píxeles de las fotos de una determinada forma (de matriz, como no) podemos calcular los autovectores, que en este caso se llamaneigenfaces (¡no pienso traducirlo!), y al volver a interpretarlos como imágenes obtendríamos imágenes fantasmagóricas como estas:
Eigenfaces: Nunca un autovector te había mirado con esa carita (fuente)
Lo importante del asunto es que, automáticamente, los autovectores nos dicen las características más relevantes de cualquier conjunto de datos (en esto se basado el PCA). Esas caras se pueden interpretar por tanto como una representación de las facciones más distintivas de cada una de las personas del conjunto de fotos usado.
Otra aplicación del mismo principio, menos espectacular pero quizás más didáctica, es la de obtener los ejes principales de una matriz de dispersión (o de covarianza) de un conjunto de muestras. En cristiano: ver en qué direcciones tienden a estar alineados un montón de puntitos.
Un ejemplo en dos dimensiones: si calculamos la matriz de covarianza de los puntos de la figura, sus dos autovectores nos indican las direcciones marcadas por flechas, cuya longitud está dada por los autovalores. Y el autovector del mayor autovalor nos dice la dirección principal en la que se alinean los puntos. ¿Fácil, verdad?
Nube de puntos 2D y sus autovectores escalados por sus autovalores (fuente)
Y para terminar, otra aplicación sorprendente de los autovectores: la física cuántica. El concepto de autovalores se puede aplicar a la ecuación de Schrödinger u otras más complejas (Hartree-Fock) para averiguar cómo se comportan las partículas más microscópicas como electrones "orbitando" en un átomo, incluso dentro de una molécula compleja.
En este caso, los autovalores tienen la interpretación de la energía de cada estado, y los autovectores nos indican las funciones de onda que describe el objeto estudiado (p.ej. el tipo de órbita).
Autovectores, u órbitas, de un electrón en un átomo de hidrógeno (fuente).
En teoría de grafos, también tienen los autovectores una aplicación crucial: aplicadas a la matriz de conectividad (Laplaciana) del grafo, nos dan información crítica sobre su estructura.
De hecho, usas una variación de este método a diario: el método Page Rank de Google está basado en la teoría de autovectores para decidir qué páginas son realmente más relevantes a la hora de resolver búsquedas.
Por si alguien quiere usar los botones que hice para compartir esta página por Facebook + Twitter + Menéame + Divúlgame + GooglePlus, les dejo debajo las instrucciones. Tuve que modificar otras versiones de botones que encontré por ahí porque quería que todos los botones fuesen pequeños y tuviesen contador (el contador de Menéame aparece como texto Alt en su versión actual).
En Blogger, ir al menú "Plantilla" -> "Edición de HTML" y marcar "Expandir plantillas de artilugios" (antes de nada, recomiendo hacer una copia de seguridad de la plantilla).
Buscar esta línea:
<data:post.body/>
Y justo antes de ella, dentro del mismo contenedor div, insertar este código:
<!-- ME: Tabla de social sharing: -->
<b:if cond='data:blog.pageType != "static_page"'>
<div align='center' style='float:right;margin-left:10px;'>
<!-- ====== -->
<table border='0' style='background-color: #F8F8F8; border: solid 1px #DDD; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; border-spacing: 2px;'>
<tr><td>
<div align='left' style='margin-bottom:5px;'>
<a expr:share_url='data:post.url' name='fb_share' type=' button_count'>Compartir</a>
<script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'>
</script>
</div>
</td>
</tr>
<!-- ====== -->
<tr><td>
<div align='left' style='margin-bottom:0px;margin-top:0px;'>
<a class='twitter-share-button' data-count='horizontal' expr:counturl='data:post.url' expr:data-url='data:post.url' href='http://twitter.com/share'>Tweet</a><script src='http://platform.twitter.com/widgets.js' type='text/javascript'/>
</div></td></tr>
<!-- ====== -->
<tr><td style='margin-bottom:0px;margin-top:0px;'>
<iframe allowtransparency='true' expr:src='"http://meneame.net/api/check_url.php?url="+data:post.url' frameborder='0' height='21' hspace='0' marginheight='0' marginwidth='0' scrolling='no' vspace='0' width='110'/>
</td></tr> <!-- ====== -->
<!-- ====== -->
<tr><td style='margin-bottom:0px;margin-top:0px;'>
<iframe allowtransparency='true' expr:src='"http://divulgame.net/api/check_url.php?url="+data:post.url' frameborder='0' height='21' hspace='0' marginheight='0' marginwidth='0' scrolling='no' vspace='0' width='110'/>
</td></tr> <!-- ====== -->
<!-- ====== -->
<tr><td style='margin-bottom:0px;margin-top:0px;'>
<!-- Place this tag where you want the +1 button to render -->
<g:plusone expr:href='data:post.url' size='small'/>
<!-- Place this render call where appropriate -->
<script type='text/javascript'>
window.___gcfg = {lang: 'es'};
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
</script>
</td></tr> <!-- ====== -->
</table>
</div>
</b:if>
<!-- fin de tabla social -->
¡Y eso es todo!
Dadle a "Previsualizar" antes de guardar y si todo se ve correctamente, guardad los cambios.
Hoy veremos no sólo porqué las tuberías pueden reventar a causa del hielo, lo que es muy fácil de entender, sino la sutil causa de que las grietas aparezcan siempre en una dirección concreta. La demostración matemática es asombrosamente sencilla.
¿Por qué revienta una tubería de agua si se congela?
Ésta es la parte fácil. Prácticamente todas las sustancias se dilatan al aumentar su temperatura, o lo que es lo mismo, disminuyen su volumen con el frío. Pero hay algunas excepciones, de las cuales la más trascendente sin duda es el comportamiento anómalo del agua: el hielo se dilata con respecto a su volumen equivalente en fase líquida. Por eso los cubitos de hielo flotan.
Si una tubería repleta de agua se enfría tanto como para que el agua se congele su volumen aumentará, lo que causará una presión en la cara interna de los tubos de metal que si es suficiente acabará por romper la tubería.
En la foto anterior se aprecia muy claramente que la grieta aparece como cortada con un cuchillo a lo largo de la tubería, en su dirección longitudinal. A priori, nada obliga a que sea así: bien podría reventar "a lo ancho" o siguiendo una trayectoria zigzageante.
La razón de la forma de estas grietas no tiene nada que ver con que el metal de la tubería sea más débil en esa dirección (si está bien fabricada no tiene porqué serlo en ninguna dirección particular), sino directamente con un principio físico muy sencillo de entender: la distribución desigual de las tensiones en el metal.
Consideremos un fragmento de una tubería sometida a presión interna, como el de la figura:
Asumiendo simetría radial en la presión que el contenido de la tubería (gas, líquido, hielo, da igual) ejerce hacia el exterior, los esfuerzos a los que estará sometida la pared de la tubería tendrán las dos componentes principales que se ven en la derecha: una tensión transversal \(\sigma_T\) y una longitudinal \(\sigma_L\). Una tensión es una magnitud física que tiene unidades de presión, p.ej. Pascales, pero no representa la acción sobre una superficie, sino la tensión interna de un material.
Llamando p a la presión ejercida por el contenido de la tubería, estudiamos primero el valor de la tensión longitudinal. Para ello, imaginemos un segmento de la tubería cerrado en sus dos extremos (¡ya que de no estar cerrados el contenido saldría y no aumentaría su presión!) como el de la izquierda:
Si pegamos un corte perpendicular al eje en cualquier punto y nos quedamos con uno de ellos (p.ej. el izquierdo), podemos deducir el valor de la tensión longitudinal a partir del principio de equilibrio de fuerzas: ya que la tubería no se mueve, todas las fuerzas horizontales en una dirección deben equilibrarse con las horizontales en dirección contraria.
En este caso tenemos la presión del contenido ejerciendo en el extremo izquierdo sobre el área circular de la "tapa" de la tubería, y por el otro, las tensiones longitudinales de la sección de la tubería (ver derecha de la figura anterior). Esta tensión existe debido al alargamiento horizontal al que es sometida la tubería por la dilatación del contenido.
La ecuación de equilibrio debe por tanto integrar las dos fuerzas repartidas, una sobre el área circular izquierda de radio R y la otra sobre la sección circular de radio interno R y grosor h. Integrando, o usando directamente las fórmulas de esas áreas (aproximando para h<<R):
Ya tenemos la tensión longitudinal, vamos a por la tangencial. Para ello, pegamos ahora un corte al tubo a lo largo de un plano que pase por su eje, quedándonos con sólo media tubería. Si miramos de frente una sección de este corte tenemos la presión del contenido empujando la pared de la mitad superior y las tensiones de los dos trozos de pared que hemos cortado, tal que así:
Las fuerzas horizontales están todas en equilibrio, lo que se deduce por simetría (el lector puede hacer la integral correspondiente como ejercicio y verificar que sale cero).
Respecto a las verticales, tenemos la parte de las tensiones del tubo hacia abajo, cuyo valor sale de multiplicar la tensión (desconocida) \(\sigma_T\) por los dos rectángulos de extensión h (grosor) por L, siendo L una longitud de tubo (arbitraria). Es decir: \(2 \sigma_T h L\).
Las componentes verticales de la presión interna se puede ver en el dibujo que se corresponden con la integral, para todos los ángulos \(\phi\) desde 0 hasta 180º (\(\pi \) radianes), de una presión \(p sin\phi \) aplicada sobre un arco de longitud \(Rd\phi\) y longitud L (arbitraria, pero la misma que antes) .
Por equilibrio de fuerzas sabemos que ambas partes sumadas deben dar cero, así que:
\[ \begin{array}{l} \sum F_{verticales} = -2 \sigma_T h L + \int_{0}^{\pi}p L sin\phi Rd\phi = 0 \\ -2 \sigma_T h + pR \int_{0}^{\pi} sin\phi d\phi = 0 \\ -2 \sigma_T h + pR \left[ -cos\phi \right]_{0}^{\pi} = 0 \\ -2 \sigma_T h + pR \left[ 1+1 \right] = 0 \\ -2 \sigma_T h + 2 pR = 0 \\ \rightarrow \sigma_T = \frac{pR}{h} \end{array} \]
En palabras: la tensión tangencial es el doble de la longitudinal, lo que claramente explica que esa sea la dirección en la que primero falla el metal de una tubería congelada: "rasgándose" a lo largo de una línea longitudinal en el que la tensión tangencial empuja para abrir el metal.
Un salto evolutivo que llevó miles de millones de años en la Naturaleza se ha conseguido realizar en condiciones de laboratorio... en sólo 60 días.
En un artículo publicado hoy en Proceedings of the National Academy of Sciences, el biólogo evolutivo Michael Travisano y colegas han publicado el resultado de un experimento espectacular por sus implicaciones aunque sencillo en su realización.
El resultado
Han convertido la levadura(unicelular) en un ser multicelular. Y eso incluye características claras de organismos multicelulares: atisbos de especialización de las células, división del trabajo, colaboración entre las células y paso por distintas etapas de la vida (juventud y madurez).
Izquierda: Células de levadura originales. Derecha: La forma pluricelular.
En este vídeose puede ver cómo se reproducen hasta formar los aglomerados que los autores describen como "parecidos a copos de nieve" (descargar en mayor calidad: 15223.mov):
¿Cómo lo han conseguido?
Los investigadores han desafiado las teorías que sostenían que un ser pluricelular requería una mayor complejidad genómica: según los autores, el primer y primordial elemento decisivo es la presión evolutiva del entorno, no la complejidad de los genes.
Para demostrarlo, dejaron crecer la levadura en un frasco rico en nutrientes. Cada día, los agitaban y se quedaban solamente con aquellos grupúsculos que se quedasen flotando formando "grumos" y descartaban el grueso de células individuales del fondo.
Tras dos meses, esos grupúsculos ya no se separaban: habían evolucionado para formar uniones indivisibles.
Y lo más asombroso: las células han "descubierto" un mecanismo de reproducción que no permite la separación del "hijo" hasta que no se encuentra ya bien formado:
Flecha: Levadura multicelular "hija", antes de separarse del padre.
Según los investigadores, se trata del primer caso de vida multicelular evolucionada artificialmente, algo que se lleva buscando desde hace más de una década infructuosamente.
Quizás te interesen algunos experimentos evolutivos anteriores:
El mantenimiento de 50.000 generaciones (¡y contando!) de E-coli para investigar sobre los parámetros de su evolución.
El "monstruo" del doctor Spiegelman, mucho más antiguo y del que ya hablé.
La evolución de microbios (Nature) donde se estudia la co-evolución de dos especies simbiontes en el contexto de biofilms.
En resumen
El sorprendente resultado del estudio, de confirmarse más veces experimentalmente y con las reservas lógicas por su novedad, podría cambiar nuestro concepto sobre las dificultad de dar ese gran paso evolutivo que hasta ahora se consideraba casi "un milagro".
La pregunta a la que probablemente nunca podremos responder es: ¿qué actuó como presión evolutiva para iniciar el proceso equivalente en la Tierra primitiva?
Para leer más:
“Experimental evolution of multicellularity" William C. Ratcliff, R. Ford Denison, Mark Borrello, & Michael Travisano. Proceedings of the National Academy of Sciences, Jan. 17, 2012.
Anonadado me hallo. En Informativos Telecinco acaban de contar la noticia anécdota de que el alcalde de Getafe apareció en televisión (de forma anónima como Juan) publicitando un método de adelgazamiento de una clínica catalana. También han dicho que con ese método se pueden perder hasta 1kg por día (sic). Pues lo siento, pero no lo me lo creo y explicaré por qué.
La noticia anécdota, según ha salido en otros medios, dice así:
"El tratamiento tiene un coste de entre 3.000 y 5.000 euros. El método ha sido experimentado en unas 30 personas, que han perdido entre 3 y 15 kilos en 20 días, según explicó un médico durante la presentación."
Para empezar, entre 3 y 15 la horquilla es demasiado grande, en mi opinión. Te hace sospechar que uno de los extremos quizás está exagerado.
El método consiste básicamente en dejar de comer, y alimentarse mediante una sonda en la nariz. Pero supongamos que maximizamos la pérdida de peso, pongámonos en el caso más extremo: dejar de ingerir alimentos nutritivos, absolutamente nada de nada.
Entonces, durante los primeros días, el cuerpo necesitaría tirar de grasas acumuladas en el tejido adiposo (lo que normalmente queremos eliminar) para extraer la energía que necesitamos para mantener el metabolismo.
¿Cuánta energía es esto? Pues según la persona (sexo, peso, ejercicio físico, etc.) entre 1.500 y 2.500kcal. Y el tejido adiposo, excelente almacén de energía, guarda unas ~7500kcal por cada kg de grasas.
Es decir, en el peor caso posible, pongamos un gasto de 2500kcal diarias sin alimentarse, se perderían unos 0.3kg diarios.
Es cuestión de equilibrio de masas y energías: nadie puede perder más de 0.3kg diarios de grasa... a menos que además de no comer nada, corra unos 10km diarios lo que probablemente no sea muy recomendable en esas condiciones; aparte de que, según cuenta el Dr. Manuel Sánchez en el vídeo, los primeros días mantienen ingresados a los que deciden seguir este tratamiento.
Evidentemente, la sonda aporta algo de nutrientes (sino, el cuerpo acabaría generando cuerpos cetónicos, etc., vamos te estarías matando de hambre literalmente) así que lo normal es esperar perder menos de esos 0,3kg por día. En el caso que se informa de 3kg perdidos en 20 días, sale una media de 0.15kg diarios, lo que sí es lógico y creo posible.
Pero 15kg en 20 días son 0.75kg/día, más del doble de la pérdida diaria de grasa máxima. Así que lo siento, pero no me lo creo.
Por supuesto, en un método tan extremo como éste, el peso corporal disminuirá no sólo por pérdidas de grasas, sino de líquidos. Pero en mi opinión es un engaño considerar eso como "pérdida de peso" ya que, en cuanto se retome una dieta normal, se recuperarán en su mayor parte.
Los ordenadores y videoconsolas, basadas en procesadores con un comportamiento 100% matemático y preciso, necesitan a veces generar aleatoriedad. Hoy traigo la historia de una de las mayores pifias que una empresa informática (IBM) haya cometido jamás relacionada con, precisamente, la faltade aleatoriedad.
Los microprocesadores no son más que circuitos electrónicos, extremadamente complejos, cuyo objetivo es simplemente mover numeritos de un lado a otro y realizar operaciones matemáticas simples con ellos. Y siempre, siguiendo algún programa preestablecido más o menos complejo y de manera incansable.
Si a un programa de ordenador se le pide que repita 100 veces un cálculo, por complejo que sea, siempre dará lugar al mismo resultado.
El problema de los números aleatorios... ¿cómo saber si realmente lo son? (Dilbert)
Por ello, quizás pueda parecer chocante hablar de "aleatoriedad" o de programas estocásticos en un ordenador. Pero existen para cubrir unas necesidades importantes. En el cálculo científico, por citar sólo una utilidad, existen técnicas de simulación llamadas de Monte Carlo, usadas por ejemplo para que un robot móvil sepa por dónde anda y por la NASA para tener en cuenta todas las posibilidades al calcular un aterrizaje de una nave en la Luna. Los métodos Monte Carlo tienen mil y una aplicaciones más así que mejor ni empiezo a enumerarlas.
También en videojuegos generar números aleatorios es algo esencial: ¿qué pensarías de jugar al Tetris si siempre se repitiese la misma secuencia de piezas? ¿O si los enemigos de un FPS siempre se portasen exactamente igual? Perderían bastante la gracia, ¿verdad?
Existen varias maneras de emular ciertas dosis de aleatoriedad con la capacidad de cálculo puramente mecánica, repetitiva y predecible de una máquina. El objetivo es generar números que sean todo lo aleatorios que sea posible, es decir: que la probabilidad de generar cada número sea la misma para todos. Además lo suyo es que las secuencias no sean fácilmente predecibles, etc.
El método más extendido para conseguir esto se llama generador de congruencia lineal, y a pesar del nombre es más simple que el mecanismo de un botijo:
Empezamos con un número cualquiera \( x_0 \) , que se llamará "semilla" (o seed).
Para cada número pseudoaleatorio que se quiera generar, usar esta fórmula recursiva:
\[ x_{i+1} = A + B x_{i} \mod M \]
El operador "X mod Y" representa simplemente el resto (módulo) de dividir X entre Y; por ejemplo: 10 mod 3 = 1.
Si has usado alguna vez un generador de números aleatorios en lenguaje C, C++, Delphi o Java, has estado usando esa fórmula sin saberlo. Por supuesto, si queremos (p.ej. en un videojuego) que los números sean distintos con cada partida, debe escogerse una semilla distinta para cada partida. Un truco muy común y efectivo es usar la fecha y hora actual.
Pues bien, por fin llego a la pifia que cometió IBM en este tema. En los años 60, IBM estaba diseñando su nueva máquina IBM System/360 y, claro, querían proporcionar en el sistema un servicio de números aleatorios. Para ello recurrieron al método del generador de congruencia lineal, pero necesitaban elegir números para sus parámetros A, B y M de la fórmula que puse arriba.
¿Cómo elegir estos parámetros? Hay dos formas: hacer un concienzudo análisis para determinar cuáles dan los mejores resultados, estadísticamente hablando, o... los números que pusieran las cosas más fáciles. Si hoy hablo de ellos es obviamente porque tomaron el camino fácil sin pensar demasiado.
Escogieron:
M=231 para evitar calcular el resto: dividir por potencias de dos en informática se convierte en encender o apagar determinados "ceros y unos" en una ristra de ceros y unos en el que se puede representar cualquier número.
A=0 para ahorrar una suma.
B=65539 porque 65539 = 216 + 3, de nuevo simplifica las operaciones en binario.
Al algoritmo así creado se le dió el infame nombre de RANDU y ha pasado a la historia por ser el paradigma de todos los males que pueden afectar a un mal diseñado generador aleatorio. En su descargo, habría que alegar que los ordenadores de la época intentaban minimizar todos los cálculos costosos innecesarios. Pero en este caso se pasaron al buscar simplicidad sin pensar en las consecuencias. Los fallos de su algoritmo fueron:
Sólo se puede inicializar con semillas que sean números impares.
Las probabilidades de aparición de cualquier número par son nulas: ¡sólo genera números impares!
Todos los generadores, al final, acaban repitiendo la secuencia (lo que se llama período del generador). Aunque podría tener un período de hasta 231, realmente empieza a repetirse bastante antes.
Lo peor de todo: los números generados ¡tienen una fuerte correlación entre sí!
Para ilustrar este último punto quiero mostrar algunas gráficas y un vídeo. Para hacerlos, he tenido que crear una pequeña clase en C++ que implementa RANDU, así que lo dejo aquí por si a alguien le viene bien:
Si ahora normalizamos los números (para que estén entre 0 y 1) y los dibujamos en una gráfica unidimensional, cada uno a la derecha del otro, tenemos una imagen que aparentemente muestra números decentemente aleatorios.
¿Y si los dibujamos de dos en dos? Podemos ir cogiendo pares de números, y cada uno será la coordenada X e Y de un punto en el plano 2D. También obtenemos algo con pinta decente de aleatorio:
¿Y de tres en tres? Ahora cada trío de números serán las coordenadas X, Y y Z de un punto. Esto obtenemos:
Tiene buena pinta... ¡hasta que lo giramos en 3D! He grabado un vídeo para ilustrar lo que ocurre:
Efectivamente: ¡todos los puntos caen en planos! Concretamente, 15 planos.
Como demuestran en la Wikipedia, se puede ver fácilmente que los parámetros usados en RANDU, operando acaban dando la siguiente fórmula recursiva:
\[ x_{k+2}=6x_{k+1}-9x_{k} \]
Que es... la ecuación de un plano. Y al estar trabajando con aritmética modular ese único plano se parte en varios, que es lo que vemos en la figura.
Pero, ¿es esto tan terrible? Sí, es gravísimo: cualquier experimento científico (p.ej. Monte Carlo) que analice datos usando como fuente RANDU, acabará concluyendo que existe correlación entre las variables del estudio, no porque realmente exista, sino por culpa de los números falsamente aleatorios de entrada.
Como escribirían en el mítico Numerical Recipes veinte años después:
"si tuviéramos que eliminar todos los artículos científicos cuyas conclusiones han quedado invalidadas por culpa de usar RANDU, quedaría en cada estantería un hueco del tamaño de un puño".
Así que ya sabéis: ¡no es aleatorio todo lo que lo parece! ;-)
Para acabar, mi recomendación si necesitáis un generador pseudo-aleatorio de calidad: Mersenne twister.
Hoy sólo quería traeros una idea que en sólo seis días ha conseguido más de 17,000 firmas: la reclamación de una casilla en la declaración de la renta española para la ciencia.
En la actualidad, un 0,7% del IRPF de cada contribuyente puede ir (a su elección) a la Iglesia católica española o a fines sociales. En los últimos años sobre un 70% elije la opción de fines sociales, resultando en un reparto anual de unos ~260 y ~150 millones de euros para fines sociales y la Iglesia, respectivamente.
En su blog, el investigador Francisco J. Hernández propuso la creación de una tercera casilla, de forma que voluntariamente los ciudadanos puedan optar por apoyar a la I+D del país.
En seguida se creó una entrada en Actuable para que firme quien apoye la idea, así que no dudes acudir si te parece buena idea.
Obviamente, la idea tiene dos posibles pegas: la más gorda, que por muchas firmas que se reúnan no se puede tener la más mínima esperanza realista de que realmente se introduzca esa casilla. Pero... como mínimo todo esto servirá, como ya lo está haciendo, como vehículo de denuncia y publicidad del lamentable olvido en que los sucesivos Gobiernos tienen al sector de la innovación con fondos públicos.
De hecho, ya se ha conseguido llamar la atención de los medios: ver nota en EuropaPress.
Y la segunda pega, mitigada por el filtro de la primera, es que alguien podría alegar que desviar fondos de fines sociales a ciencia va en contra de la "ética" o algo similar. Podría ser cierto en parte, aunque no todo es blanco o negro: si se considera la investigación como una inversión, lo gastado hoy repercutirá en potenciales empresas, spin-offs y puestos de trabajo durante muchos años en el futuro.
Pronto empezaré con temas técnicos de nuevo, ¡que vaya año 2012 blogero más flojito llevo! :-)
(¡Feliz 2012 a todos lo lectores! Empezamos el año con un tema distinto al habitual, pero me ha llegado una iniciativa que no quería dejar de compartir.)
Un grupo nacido en la Universidad de Oxford (UK) ha lanzado un polémico mensaje a los activistas (e.g. OccupyLondon) que se preocupan por el porvenir de la sociedad: la mejor contribución que podéis hacer al mundo es convertíos en banqueros y así podréis maximizar lo que donéis a los necesitados.
La iniciativa se centra en llegar a las personas "más éticas" que hoy día, de entrada, renunciarían a una carrera como financiero o banquero por considerarlas contrarias a la moral. Al contrario, según sus cálculos, donando la mitad de un sueldo de banquero a tratamientos de la tuberculosis se pueden salvar 10.000 vidas y, aún así, cobrar el doble del sueldo medio en Reino Unido.
El movimiento se llama 80,000 hours (80000hours.org) por el tiempo estimado que se le dedica a estudiar una carrera y formarse, hace hincapié en que la elección de la carrera profesional que van a seguir quienes tengan tendencias filantrópicas es clave, ya que si de verdad tienes pensado ayudar a los necesitados, conseguirás mucho más haciéndote rico y donando dinero que ejerciendo de voluntario o donando lo poco que ganes en cualquier empleo "normal".
En el siguiente vídeo (en inglés) explican sus ideas:
Ya han llamado la atención de la BBC y se preveén nuevas acciones en (al menos) la ciudad de Oxford durante este mes de Enero, por lo que puede que los veamos en los medios próximamente.
La gran pregunta que uno no puede evitar hacerse al oir esta iniciativa es ¿y quien realmente llegue a cobrar un sueldo de banquero, seguirá pensando en donar, o preferirá quedárselo para él y su familia?