Mostrando entradas con la etiqueta Computación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Computación. Mostrar todas las entradas

miércoles, 31 de octubre de 2007

Física y Tablets


De nuevo el MIT nos sorprende, y siguiendo la línea de la entrada correspondiente a "Reconocimiento de escritura de ecaciones", hemos encontrado una aplicación para hacer simulaciones de física de sólidos en 2D mediante dibujo a mano alzada en un tabletPC o una tableta digitalizadora (o ratón). Se dibujan los objetos, las fuerzas y se lanza la simulación, impresionante.

lunes, 9 de julio de 2007

Nanodunas

A raíz del post de Falevian sobre la Física a diferentes escalas, aprovecho para comentaros un artículo que he publicado en la revista española de Física, en la sección Física y Computación, sobre la Física de la formación de dunas por erosión iónica.

En la figura de la derecha se muestran dos sistemas formados por dunas, uno se trata de dunas de arena en el desierto (figura superior) y la otra de dunas firmadas sobre vidrio. Lo interesante de la analogía es que en el primer caso, las dunas tienen una anchura de varios centímetros, mientras que en las segundas apenas tienen unos pocos nanómetros (o sea que son más de 10 millones de veces más pequeñas). En el primero caso es el viento el agente erosivo y en el segundo el impacto de iones energéticos que impactan violentamente contra el vidrio.

En el artículo se discute un modelo teórico que explica las causas últimas de la formación de estas dunas y se resuelve con ayuda de un ordenador las ecuaciones.




Es interesante notar un caso que no se presenta en el caso de la arena, ¿qué pasa si el agente motor (en este caso los iones) incide perpendicularmente a la superficie de vidrio? En este caso no se forman dunas sino pequeños "puntos" (conocidos en la literatura científica como "nanodots"). En la figura de la izquierda se muestra la comparación entre la predicción del modelo teórico (la figura b1 y b2) y los resultados de experimentos realizados por los mismos autores (la a1 y la a2). Bonito, ¿verdad?






En la página de Javier Muñoz, uno de mis colaboradores, podéis encontrar más información, como por ejemplo este vídeo ...


miércoles, 4 de julio de 2007

El Cubo de Rubik en 26 movimientos


Mediante un superordenador, de nuevo basado en el cálculo distribuído ( el Teragrid), Cooperman y Kunkle de la Northeastern University localizan una manera de hacer el cubo de Rubik en menos de 26 movimientos desde cualquier posible estado de origen. Para ello usan teoría de grupos y muchísimos cálculos y RAM.
Según dice, tras un pre-calculo bastante pesado, proporcionan un posible estado al ordenador, y resuelve, en pocos segundos, los 26 movimientos necesarios para resolverlo.

viernes, 1 de junio de 2007

Laboratorio de cuántica Online


En éste enlace podéis econtrar un laboratorio de experimentos de cuántica bastante completo.
Superposisción de ondas, paquetes en pozos, barreras, propagación de ondas, precesión de Larmor, spin echo,

viernes, 27 de abril de 2007

Primera simulación de una rotura de simetría


Se ha conseguido calcular y reproducir una rotura de simetría en Cromodinánima Cuántica.
Un grupo de investigadores con Shoji Hashimoto, en el KEK ( High Energy Accelerator Research Organization,Kyoto University) . Los quarks que forman el nucleón portan aproximadamente el 2% de la masa del mismo, dejando el resto del 98% gracias a la rotura espontánea de simetríal quiral. Esta idea no ha sido probada teóricamente, pero se ha conseguido resolver numéricamente en éste experimento.
Para ello han usado la supercomputadora "IBM System BlueGene Solution".

miércoles, 11 de abril de 2007

Computación distribuida y confinamiento magnético

El ayuntamiento de Zaragoza, en colaboración con el Instituto de Biocomputación y Física de Sistemas Complejos (BIFI) de la Universidad de Zaragoza y el Laboratorio Nacional de Fusión del CIEMAT, ha puesto en marcha el proyecto ZIVIS, cuyo objetivo es la creación de una plataforma ciudadana de Súper Computación basada en la unión de equipos informáticos de los hogares e Instituciones publicas, para dar servicio a los investigadores de nuestra ciudad.

El proyecto está basado en el software del proyecto BOINC Berkeley Open Infrastructure for Network Computing y como aplicación piloto se realizarán cálculos relativos al confinamiento magnético necesario para el reactor fusión que está desarrollando el CIEMAT.



BOINC proporciona un entorno de computación distribuida, herencia del famoso proyecto SETI@Home. Un protector de pantalla ejecuta código por bloques que se baja y actualiza en la red cuando el ordenador no se está usando de manera interactiva.
Dentro de BOINC tenemos los siguientes proyectos http://boinc.berkeley.edu/projects.php

miércoles, 7 de marzo de 2007

¿Son igual de probables todos los dígitos en una distribución de datos?: Ley de Benford

Intentaré explicar el título. Como parte de mi trabajo, busco anomalías y realizo auditorías de sistemas de información. Buscando procedimientos originales y prácticos me encontré con la Ley de Benford.
Parece que cuando se tiene en cuenta el primer dígito distinto de cero de una distribución no es igual de probable que sea el 1, o que sea el 2,... siguen la siguiente distribución:


Dígito Prob.
1 0.30103
2 0.176091
3 0.124939
4 0.09691
5 0.0791812
6 0.0669468
7 0.0579919
8 0.0511525
9 0.0457575




De éste curioso efecto se dió cuenta el astrónomo y matemático Simon Newcomb, en 1881, cuando observó que las primeras páginas de los libros con tablas de logaritmos estaban más usadas que las últimas. Las primeras son las que el primer dígito significativo es 1.
Años más tarde (1938), Frank Benford, físico, observó el mismo fenómeno y realizó una comprobación empírica sobre un total de 20.229 números agrupados en 20 muestras. Datos sobre áreas fluviales, constantes y magnitudes físicas y químicas, funciones matemáticas e incluso números de direcciones de personas. A partir de los resultados del análisis de estos datos postuló una ley de los números anómalos.
Algunos ejemplos con datos actuales son:
Datos del censo:
Cantidades de transferencias reales:
Y otros muchos ejemplos que podéis encontrar, por ejemplo, en http://www.nigrini.com/Benford's_law.htm

Parece que se cumple bastante bien.
Esta ley permite localizar datos falsos en contabilidades, fraudes en elecciones, anomalías en distribciones, y un largo etc. Parece que el ser humano suele tender a usar más los dígitos 5 o 6 cuando se inventa cifras. Están más cercanas a la mitad.
El desarrollo matemático está en Benford´s Law, y a lo que sellega es que la probabilidad de que el primer dígito (decimal) sea D viene dado por:
Os paso un enlace de una herramienta java que permite verificar el grado de cumplimiento de la ley.
Por cierto, en la segunda temporada de la serie Numb3rs hay un capítulo cuyo argumento matemático es la Ley de Benford.

jueves, 15 de febrero de 2007

Efecto de la temperatura en los procesadores

Ya sabemos que el calor afecta negativamente sobre el rendimiento en los procesadores de los PCs. Cuanto mayor sea la temperatura, mayor será el ruido en el procesador, se produciran más fallos y puede llegar a producirse el efecto de electromigración. A través de este efecto los electrones de los semiconductores saltan o migran a otros lugares (normalmente pistas paralelas) provocando cortocircuitos internos dentro del micro, y se tiende a terminar quemando el propio núcleo.

Electromigración provocando cortocircuito

Podeís encontrar mucha información del proceso en la Middle East Technical University, de dónde he sacado esta foto. No está muy claro si éste efecto es importante en los procesadores.
Cuales son los límites de funcionamiento de los procesadores, para hacernos una idea:
All Slot A CPUs (Athlon classic, Athlon Thunderbird) 70°C
Athlon Socket A up to 1 GHz, Duron up to 1.3GHz
90°C
Athlon "Thunderbird" Socket A 1.1GHz or more 95°C
Pentium D 820 (2.8GHz) 63°C
Pentium D 830 and 840 (3.0-3.2GHz) 69.8°C



¿Qué ocurre con el otro extremo? ¿Hay un límite para la temperatura inferior? Muy buena pregunta. Al fin y al cabo estamos trabajando con semiconductores, y como la conductividad depende de la temperatura:
Temperature dependence of thermal conductivity for high purity Si


The dependence of thermal conductivity K versus doping level N at 20K.

La temperatura límite está demasiado lejos de lo que se puede conseguir en un entorno de PC. Cuando se refrigera un procesador, se suele hacer para poder hacer overclocking, es decir, forzar la fecuencia de funcionamiento del procesador para conseguir mayor rendimiento que a temperaturas normales.
Sin embargo hay algunos procesadores que si se ven afectados por el frio. El ColdBug de algunos procesadores AMD hace que en temperaturas bajo cero (entre -40 y -150ºC) el procesador se pare. Esto se debía a un problema con el controlador de memoria integrado. Ahora en AMD y en los procesadores Intel, el controlador está fuera del micro.





jueves, 21 de diciembre de 2006

Física con java


Siempre has querido hacer experimentos de Física...
No te da la paga para comprarte un acelerador de partículas...

Tenemos lo que usted necesita...Experimentos interactivos en sistemas complejos

martes, 12 de diciembre de 2006

Física y computación


Después de un parón, la sección Física y computación de la Revista Española de Física ha vuelto (aquí tenéis los números anteriores). Confiamos en que la dirección de Esteban Moro sea tan buena como la de su predecesor Angel "Anxo" Sánchez.

Por cierto, estoy seguro de que las contribuciones son bienvenidas así que, si alguno tiene algo interesante que contar, que se ponga en contacto con la revista.

martes, 28 de noviembre de 2006

La ONU recomienda usar software Libre

Esto no lo pone Microsoft en su web sobre las ventajas de Windows sobre Linux, ¿porqué sera?...
La ONU recomienda la utilización y el fomento del 'software' libre tanto en el seno de la organización como entre los países miembros, dijo el inspector de Naciones Unidas Dominique Ouredrago, que participó en la clausura de la II Conferencia Internacional de Software Libre celebrada en Málaga.

Ouredrago indicó que en dos informes la ONU considera que el 'software' libre es el vehículo "más adecuado" para el desarrollo de los países miembros, especialmente en materia de salud, educación y comercio internacional.

Algunos extractos de los documenos de la ONU:

El software libre es muy común. De hecho, la mayoría de la gente lo utiliza diariamente
sin darse cuenta, al menos de manera indirecta. Es una fuerza dominante en Internet. De hecho,
más de la mitad de los servidores de Internet (computadoras que albergan los sitios web y los
hacen accesibles) funcionan con un sistema operativo de software libre como GNU-Linux;
el 60% de los servicios de Internet utilizan el programa Apache para distribuir páginas web; y
el 90% del Sistema de Nombres de Dominio que permite a los navegadores encontrar un sitio
web por su nombre de dominio (por ejemplo, www.unctad.org) usan un programa de software
libre llamado BIND.

Dada la importancia del software libre y la oportunidad de este debate, los gobiernos deberían estudiar la posibilidad de expresar su política en materia de software libre en su
estrategia general de comunicaciones electrónicas. Aunque existen numerosas y muy buenas
razones para preferir el software libre, éstas deben evaluarse basándose en las realidades de la
propia preparación para el uso de las tecnologías digitales y en la ponderación de otros factores,
como la conectividad, los recursos humanos y las posibilidades de desarrollo del sector local de
servicios de software. Desde la perspectiva del desarrollo, el software libre posee varias
características positivas.

Otro enlace relativo al software libre en la ONU.

martes, 7 de noviembre de 2006

Distribución Linux para científicos

Hay una distribución relativamente nueva bastante interesante. Se trata de Quantian, basada en knoppix y clusterknoppix. Es una Live, es decir, se puede arrancar directamente desde CDROM, se puede montar un cluster de cálculo directamente arrancando varios desde varios PC en red, usando openMosix, y trae un montón de herramientas ciéntificas ya instaladas, como:

miércoles, 11 de octubre de 2006

Nos integramos

Integramos dos Blog, éste en el que estáis y el de Ciencia, Simulaciones, Linux y otros animales.
Hemos añadido las entradas que tenía el otro blog, y empezaremos a trabajar en paralelo, que cunde más.
Bienvenido, Donlockwood.

La informática también es una ciencia

La Informática es una gran ciencia. En contra de lo que podemos pensar como usuarios, es una disciplina bien estructurada, en ocasiones infinitamente mejor pensada que la arquitectura o la ingeniería civil. Y sin embargo, las casas apenas se caen y los sistemas informáticos apenas se sostienen.

La culpa, desde mi punto de vista, no la tiene la Informática sino el desempeño de la misma. ¿Quién quiere hacer un buen diseño de un software si los 40 días que necesitaría para la documentación y análisis del problema se los doy a los pobres becarios (físicos como yo muchos de ellos) para que programen casi a ciegas?

En otras palabras, la Informática es una ciencia, pero los informáticos (en general y sobre todo muchos intrusos de otros campos) son pobres ingenieros informáticos.

Esta reflexión no tiene mayor transcendencia (salvo la de una conversación en un bar) si no fuera por el decisivo papel que puede tener la informática en otras ciencias. Muchos físicos como yo dependemos de la misma para desarrollar nuestras teorías, contrastarlas y representar la información en la pantalla de un ordenador.

La cuestión es, ¿podemos aprovecharnos de la teoría que subyace a la Informática para hacer mejor nuestra ciencia? Mi respuesta es sí.

Os pondré un ejemplo (que desarrollaré otro día cuando os hable de mi proyecto de crear una librería para integrar [casi] cualquier problema de la Física basado en ecuaciones diferenciales).

Queremos estudiar un cierto modelo que hemos propuesto analíticamente para explicar el fenómeno F. El modelo consiste en una ecuación en derivadas parciales para el observable H que depende del tiempo "t" y de la posición "x" (n-dimensional). ¿Qué hacemos?

1) Cogemos un programa que hayamos desarrollado para un problema similar (en FORTRAN o C) y lo adaptamos al nuevo problema
2) Creamos un nuevo programa que es bastante mejor que los anteriores porque corrige algunos fallos que tenían estos o simplemente nos resulta más fácil de manipular o entender.
3) Conseguimos que alguien nos haga el programa.

La solución 3) es genial, sólo que a veces las cosas no le salen a nuestro colega y nos cuesta un horror entender su código y poder ayudarle.

La solución 2) es la que adoptamos la mayor parte de las veces, máxime teniendo en cuenta que ya no entendemos los códigos que hicimos para otros problemas similares o simplemente no sabríamos cómo modificarlos fácilmente.

La solución 1) está muy bien, sólo que hay que tocar en "N" sitios para que el código al final nos dé el resultado esperado.

¿Pero realmente qué hacen todos nuestros programas?

1) Empieza el programa principal. Se declaran las variables, los parámetros, algunas funciones o subrutinas auxiliares...
2) Se leen datos de un fichero (o de la línea de comandos) para definir los parámetros del problema. Algunos de estos parámetros son del modelo y otros de la simulación (intervalo de tiempo, precisión, número de promedios, semilla del generador de números aleatorios, ...)
3) Se fija la condición inicial, se crean los ficheros de salida, ...
4) Empieza la "simulación" o integración numérica por el método X y periódicamente guardamos el valor de un observable (la media, la varianza, ...) en un fichero.
5) Se post-procesan los resultados de la simulación y ADIOS CHARLIE.

Los que trabajamos con el numérico hacemos esto infinidad de veces.

Otro ejemplo son las simulaciones de Monte Carlo, o autómatas celulares, o simulaciones basadas en agentes (para problemas sociales o biológicos, ...)

La Informática tiene soluciones más serias para estos problemas. Las llaman Metodologías. En particular hay una que causa furor desde hace años y que no está suficientemente explotada por los científicos de otras áreas (como siempre, hablo en términos generales desde mi reducida perspectiva): la orientación a objetos.

La orientación a objetos trabaja con abstracciones, sin importar los detalles particulares del problema. Así, en el ejemplo que puse antes, lo que importa es que trabajamos con parámetros, campos, números aleatorios, ecuaciones, observables, ...

Bien, definamos objetos para todas estas abstracciones y ya podremos reutilizar de manera transparente y eficiente la mayor parte de nuestro código sin tener que retocar a mano todo el mismo.

Por ejemplo, un código como el que describía anteriormente podría ser así en C++:

#include

main()
{
[...]
fichero >> ParametrosDeLaSimulación;
fichero >> ParametrosDelModelo;
fichero >> ListaDeObservables;
fichero >> Ecuaciones;
algoritmo.set("RungeKutta4");
simulador.crea(Ecuaciones,algoritmo,ParametrosDeLaSimulacion,ParametrosDelModelo,
ListaDeObservables);
simulador.postprocesayguarda(Observables);
}

Esto hay que diseñarlo bien, pero una vez hecho, qué más da que las ecuaciones modelen la erosión de una superficie o el crecimiento de un tumor (cuña publicitaria ;-) ): la estructura es la misma.

En fin, mi conlcusión es:
* Estudiemos Orientación a Objetos
* Hagamos códigos robustos, extensibles, legibles, eficientes y versátiles
* Una vez hecho esto: centrémonos en la ciencia no en la informática.

Otro día hablaré de este último punto, pero lanzo una pregunta ¿no tenéis la impresión de que a veces trabajamos sin un gran proyecto a largo plazo? Es decir, está muy bien el tipo de problemas que estudiamos (si no fuese así tampoco lo admitiríamos) pero, ¿no aspiramos a un conocimiento de mayor nivel? ¿Resolvemos problemas o PROBLEMAS?

En fin, que ya me va entrando hambre.

Esta vez, espero vuestros comentarios.

Más sobre creación de imágenes, esta vez en color

En mi primer post (bueno el segundo) os conté cómo crear una imagen bidimensional a partir de un fichero de datos. En esta entrega os contaré como hacer lo mismo con color.

Para empezar, ya no crearemos un fichero pnm sino uno de tipo ppm. La diferencia reside en que los primeros cuantifican el color con un número entre 0 y 65535 y los segundos con una terna de números entre 0 y 255 que representan la cantidad de rojo verde y azul que contiene la imagen.
Para que entendáis mejor el código voy a crear un código intermedio que hace lo mismo que el del post anterior pero en el nuevo formato.

Así, el código en custión sería



#!/bin/bash

if [ $# -ne 3 ]; then
echo "Sintaxis: $0 Nx Ny fichero_de_entrada "
exit
fi

awk '
BEGIN{max=-100000000; min=100000000;}
{
for (i=1;i<=NF;i=i+1){ if (max<$i) max=$i; if(min>$i) min=$i;}
}
END{print max,min}' $3 | awk -v Nx=$1 -v Ny=$2 '
BEGIN{print "P3\n#\n\n" Nx,Ny "\n255 255 255"}
NR==1 {
max=$1;
min=$2;
}
{
for(i=1;i<=NF;i=i+1) { val=int(($i-min)*255/(max-min)) print val,val,val } }' - $3 >$3.ppm

Fijaos en la diferencias:
1) El tipo de archivo no es "P2" sino "P3".
2) En lugar de incluir una única escala (65535) incluimos tres (255 255 255).
3) Por cada pixel imprimo tres números (con el comando print val, val, val)

¿Qué necesitamos para crear una imagen en color? Pues muy fácil, una paleta. Las paletas permiten hacer una mapping entre un subconjunto de los números reales (entre min y max) a un espacio vectorial de tres dimensiones de enteros (entre 0 y 255).

Existen muchas paletas. Yo he usado una que cree hace siglos para una aplicación en basic que hice en el colegio. La versión awk sería la siguiente:

#!/bin/bash

if [ $# -ne 3 ]; then
echo "Sintaxis: $0 Nx Ny fichero_de_entrada "
exit
fi

awk '
BEGIN{max=-100000000; min=100000000;}
{
for (i=1;i<=NF;i=i+1){if (max<$i) max=$i; if(min>$i) min=$i;}
}
END{print max,min}' $3 | awk -v Nx=$1 -v Ny=$2 '
BEGIN{
for(i=0;i<128;i++) i="0;i<128;i++)" i="0;i<="255;i++)">255) r[i]=255; if(g[i]>255) g[i]=255; if(b[i]>255) b[i]=255;}

print "P3\n#\n\n" Nx,Ny "\n255 255 255"
}
NR==1 {
max=$1;
min=$2;
}
{
for(i=1;i<=NF;i=i+1) { val=int(($i-min)*255/(max-min)) print r[val],g[val],b[val] } }' - $3 >$3.ppm

La definición de la paleta está incluida en los bucles

for(i=0;i<128;i++) i="0;i<128;i++)">
El bucle que aparece a continuación de estas líneas es para comprobar que no hay errores de rango. Si queréis crear otra paleta, sólo teneís que definir las matrices r[], g[] y b[]. MATLAB tienes decenas de paletas definidas que probablemente se puedan exportar. Para que veáis un ejemplo os incluyo una imagen de unas simulaciones de un modelo de Crecimiento de Depósitos de Vapor (CVD).

Vim, ese semidiós (primera parte)

Hoy voy a hablar de vim (la versión mejorada de vi). vim tiene todo lo bueno de vi, pero además permite una serie de extensiones, plugins y macros que quitan el aliento. En otra ocasión os hablaré de los plugins y os recomendaré alguno. Mientras podéis disfrutar de todo sobre vim en el enlace

http://www.vim.org

En este post os hablaré del fichero de configuración .vimrc que se encuentra en vuestro directorio $HOME

Este fichero permite incluir una serie parámetros y opciones que se cargan en vim en el momento de arranque.

A continuación os detallo algunas líneas de mi fichero .vimrc que os
pueden ser de utilidad

" Los comentarios van precedidos por unas comillas
" La siguiente línea cambia el tamaño por defecto del tabulador a 3
set tabstop=3

" mantiene 50 líneas de historia de comandos en una sesión vim
set history=50

Y ahora mi parte favorita, los "mapeos" de teclas a comandos.

" Los tres siguientes permite usar el comando externo 'par' que
" viene con casi todas las distribuciones linux (salvo Suse) e incluso
" con cygwin y que permite manipular párrafos de texto
" El siguiente simplemente toma un párrafo (considerando párrafo hasta
" las siguiente línea vacía) y lo ajusta a 78 columnas simplemente pulsando
" F3
map !}par -w78
" El siguiente hace lo mismo pero para un selección hecha en
" modo visual (con el comando v), de ahí la v de 'vmap'
vmap !par -w78
" Por último, pulsando F4 ajusta el texto a 78 columnas indentando por
" los dos extremos (añadiendo espacios si fuese necesario)
map !}par -j1 -w78

" imap hace referencia a comandos en modo 'insertar'. El siguiente
" comando ayuda a escribir textos en LaTex. Si escribes la palabra
" itemize y pulsas (en modo insertar) F4 te crea el begin y end
" correspondientes.
imap bi\begin{$a}yypwdwiendO

" Y ya que estamos con Latex, aquí tenéis algo cómodo
" F5 guarda el fichero actual y lo compila
map :w!:!latex %
" F6 invoca al comando xdvi
map :!xdvi %<.dvi&
" F7 crea el postscript correspondiente (en compatibilidad PDF) y llama
" al programa "gv"
map :!dvips -P pdf -G0 %<.dvi >& /dev/null :!gv %<.ps &
" Por último, F8 crea un pdf y llama al comando xpdf
map :!ps2pdf %<.ps:!xpdf -z page %<.pdf &

Para finalizar, os hablaré de los pliegues o 'folds'. Son agrupaciones de varias líneas en una única línea que se despliega con un comando. Para más información sobre los pliegues podeís poner (dentro de vim) :help folds.

Yo uso los pliegues cuando escribo un código en C++ o un documento en LaTex muy grande. Para C++, lo que me interesa es que todas las estructuras, clases y subrutinas se compacten. De este modo un código con 6 clases, 14 funciones y la función main, se reduce a la parte de los includes, las variables globables y 21 pliegues, lo cual cabe casi en la ventana de edición por lo que puedo echar un vistazo muy rápido al código completo.

Para manejar los pliegues en un código C++, bastaría con añadir a .vimrc:


map F za
map :set foldmarker=\{,\} :set foldmethod=marker



El primer mapeo permite conmutar entre abierto y cerrado cuando estamos situados sobre un pliegue pulsado F (en modo comando, se entiende). La segunda línea somplemente crea los pliegues al pulsar shift-F12.

Para LaTex, podríamos hacer, por ejemplo:


map :set foldmarker=\\begin,\\end :set foldmethod=marker

Un pequeño código en awk para crear imágenes a partir de una lista de números reales

El truco de hoy consiste en lo siguiente. Supongamos que hemos hecho una simulación de un problema en dos dimensiones, o en una pero queremos representar en una figura el espacio (eje x) y el tiempo (eje y). Podemos integrar una rutina en nuestro código (lo cual lo ralentiza) o podemos crear la imagen mediante un software de visualización (por ejemplo MATLAB).

Lo que yo os propongo es más sencillo, utilizar un pequeño script basado en la shell bash y en el potentísimo awk (o gawk) para crearlo.

Así, supongamos que tenemos un fichero con una lista (o matriz) que contiene los dimension_x*dimension_y valores de nuestra figura (por ejemplo en un problema de crecimiento para un sistema 100x100, el fichero sería una lista de 10000 líneas que contienen el valor de la altura en cada uno dos los 100x100 puntos). Se supone que ese fichero lo crea nuestra aplicación.

Una vez que tenemos ese fichero (llamémosle height.dat), creamos un fichero de texto (llamado, p. ej. array2pnm) que contenga la siguiente información




#!/bin/bash

if [ $# -ne 3 ]; then
echo "Sintaxis: $0 Nx Ny fichero_de_entrada "
exit
fi

awk '
BEGIN{max=-100000000; min=100000000;}
{
for (i=1;i<=NF;i=i+1){ if (max<$i) max=$i; if(min>$i) min=$i;
}
}
END{print max,min}' $3 | awk -v Nx=$1 -v Ny=$2 '
BEGIN{print "P2\n#\n\n" Nx,Ny "\n65535"}
NR==1 {
max=$1;
min=$2;
}
{
for(i=1;i<=NF;i=i+1) print int(($i-min)*65535/(max-min)) }' - $3 >$3.pnm



Y lo ejecutamos con la siguiente sintaxis

./array2pnm 100 100 height.dat

Este comando creará el fichero "height.dat.pnm" que se puede visualizar con cualquier programa (por ejemplo display). Si queremos convertirlo a otro formato existen infinidad de librerías. Yo os recomiendo que instaléis el paquete ImageMagick que viene con todas las distribuciones de Linux. Tiene un programa llamado "convert" que hace todo el trabajo.

Por ejemplo

convert height.dat.pnm height.gif

Y ya está...

lunes, 9 de octubre de 2006

Computación cuántica: teletransporte


Ahora está de moda lo de la computación cuántica, supongo que porque ya se empiezan a conseguir resultados experimentales. Una de las noticias más recientes es que el grupo del Instituo Niels Bohr, en Copenague, ha conseguido transferir "el estado cuántico de un pulso de luz a una colección de átomos de cesio". No tenía nada claro que quiere decir esto, y he estado buscando la fuente principal para ver si consigo comprenderlo. La aplicación que se busca es la transferir información de un computador cuántico a otro, o de una zona a otra del computador. Sin embargo, lo de que un sistema macroscópico de materia tenga el mismo estado que un haz de fotones, tiene pinta de ser una interpretación de algo más complejo.
Podeis ver la noticia (incluyendo jocosos comentarios sobre la teletransportación) n
Extraído del ABC.
Por supuesto, lo que se ha conseguido es transferir "un" determinado, y no medido, estado cuántico de un haz de fotones a un sistema de átomos de cesio. Se prepara un estado global "entrelazado" y a partir de ahí se trabaja. Intentaré explicarlo mejor cuando tenga un rato para pensarlo. Por ahora os paso una presentación de powerpoint del grupo que ha publicado el artículo:
Presentación sobre el "teletransporte" cuántico>
Y os pongo (¿alguien nos lee?) el enlace al articulillo:
Quantum teleportation between two mesoscopic objects: a photonic pulse and an atomic ensemble

miércoles, 2 de agosto de 2006

Animaciones en Física en Flash

Más de 80 animaciones de Física en Flash
Esta página te proporciona el acceso a algunas animaciones sobre temas relacionados con la Física.
Se clasifican las animaciones en la categorías siguientes:
* Caos
* Electricidad y Magnetismo
* Mecánica Clásica
* Mecánica Cuántica
* Miscelánea
* Nuclear
* Ondas
* Ondas sonoras
* Óptica
* Osciloscopio
* Relatividad
* Tornillo (o calibre) micrométrico
* Vectores
Además, el autor ha publicado un tutorial sobre como usar Flash en al divulgación de la Física.
Hay animaciones sobre el Caos, Física Nuclear, relatividad, Óptica, etc.
Bastante curioso.

martes, 11 de julio de 2006

Variables Ocultas y Desigualdad de Bell


Curiosamente no todo el mundo tiene claro qué sucede con la "teoría" de variables ocultas y el choque que existía con la interpretación de la mecánica cuántica.
Este asunto está resurgiendo gracias al interés que se está despertando por el "entrelazamiento" en los procesos de computación cuántica. De este tipo de procesos hablaré más adelante, en otro "Post"
Intentaré hacer un resumen, sin mucho rigor matemático (más que nada porque no es nada sencillo).
En el año 1964 John Bell propuso una forma matemática para poder comprobar la paradoja EPR, es decir la paradoja planteada por Albert Einstein, Boris Podolsky y Nathan Rosen en 1935.
Bell demostró matemáticamente que ciertas desigualdades son ciertas si las críticas de EPR son correctas y no se cumplían si eran falsas. Por otro lado se demostró que las propuestas de la teoría de variables ocultas y las de la cuántica eran mutuamente excluyentes. Es decir, o bien existen variables ocultas o bien el artículo de EPR es falso, y existe la posibilidad de colapso de una función de onda entrelazada, independientemente del envío de señales de un punto a otro de la misma.
Juntando ambos resultados tenemos que si conseguimos montar experimentos que demuestren que las desigualdades de Bell son ciertas o son falsas, conseguiremos por fin librarnos o no de la cuántica.
Se han propuesto y montado varios experimentos que probaban el test de BELL, algunos ejemplos son:
Freedman and Clauser, 1972. Los primeros en probar la desigualdad.
Aspect, 1981-2. Se hicieron tres test de BELL, usando Calcio.
Tittel and the Geneva group, 1998. Aquí se demostró qeu la distancia no afecta al "entrelazamiento"
Weihs. En 1998, Gregor Weihs y un equipo de Innsbruck, liderado por Anton Zeilinger, se realizó un ingenioso experimento que cerraba definitivamente el bucle de localidad, mejorando el de Aspect en 1982. Se seleccionó un detector que usaba un procedimiento cuántico que garantizaba la aleatoriedad. Se comprobó que se violaba la desigualdad en 30 ordenes de magnitud, y las curvas de coincidencia coincidían con las predichas por la mecánica cuántica.
El artículo original de este último experimento está disponible en Phys. Rev. Lett. 81, 5039–5043 (1998)
Aún así podreis ver muchos sitios en los que se dice que la cuestión no está aún cerrada, y, aunque en la ciencia nunca se puede decir que algo es seguro completamente, parece bastante razonable continuar con la mecánica cuántica tal y como la conocemos.

En el esquema tenemos un experimento modelo para proba la desigualdad de Bell. La fuente S emite un par de fotones entrelazados, en dos direcciones opuestas. Cada fotón se encuentra a un polarizador cuya orientación puede ser determinada por el observador. Las señales de salida son detectadas y las coincidencias se cuentan con el monitor CM.
Otros enlaces de interés:
Artículo Original EPR
Artículo de Bell
Artículo de Aspect
Artículo del grupo de Innsbruck
Explicación del teorema de BELL