Durante octubre (2017) estaré escribiendo un programa por día para algunos
métodos numéricos famosos en Python y Julia. Esto está pensado como
un ejercicio, no esperen que el código sea lo suficientemente bueno para
usarse en la "vida real". Además, también debo mencionar que casi que no
tengo experiencia con Julia, así que probablemente no escriba un Julia
idiomático y se parezca más a Python.
Regula falsi
El segundo método a considerar es el método de posición falsa,
o regula falsi. Este método se utiliza para resolver la ecuación
\(f(x) = 0\) para \(x\) real, y \(f\) continua. Se comienza con
un intervalo \([a, b]\), donde \(f (a)\) y \(f (b)\) deben
tener signos opuestos. El método es similar al método de bisección pero en
lugar de dividir a la mitad el original intervalo toma como nuevo punto del
intervalo la intersección de la línea
que conecta la función evaluada en los dos puntos extremos. Entonces, el nuevo
el punto se calcula a partir de
\begin{equation*}
c = \frac{a f(b) - b f(a)}{f(b) - f(a)}
\end{equation*}
Como en el método de bisección, mantenemos el intervalo donde la solución
aparece, es decir, donde cambia el signo de la función.
Usaremos la función \(f(x) = \cos(x) - x\) para probar los códigos,
y como intervalo inicial \([0.5, \pi/4]\).
A continuación se presentan los códigos.
Python
from__future__importdivision,print_functionfromnumpyimportabs,cos,pidefregula_falsi(fun,a,b,niter=50,ftol=1e-12,verbose=False):iffun(a)*fun(b)>0:c=Nonemsg="The function should have a sign change in the interval."else:forcontinrange(niter):qa=fun(a)qb=fun(b)c=(a*qb-b*qa)/(qb-qa)qc=fun(c)ifverbose:print("n: {}, c: {}".format(cont,c))msg="Maximum number of iterations reached."ifabs(qc)<ftol:msg="Root found with desired accuracy."breakelifqa*qc<0:b=celifqb*qc<0:a=creturnc,msgdeffun(x):returncos(x)-xprint(regula_falsi(fun,0.5,0.25*pi))
Julia
functionregula_falsi(fun,a,b,niter=50,ftol=1e-12,verbose=false)iffun(a)*fun(b)>0c=nothingmsg="The function should have a sign change in the interval."elseforcont=1:niterqa=fun(a)qb=fun(b)c=(a*qb-b*qa)/(qb-qa)qc=fun(c)ifverboseprintln("n: $(cont), c: $(c)")endifabs(fun(c))<ftolmsg="Root found with desired accuracy."breakelseifqa*qc<0b=celseifqb*qc<0a=cendmsg="Maximum number of iterations reached."endendreturnc,msgendfunctionfun(x)returncos(x)-xendprintln(regula_falsi(fun,0.5,0.25*pi))
Comparación
Respecto al número de líneas de código tenemos: 29 en Python y 32 en Julia.
La comparación en tiempo de ejecución se realiza con el comando mágico
de IPython %timeit y con @benchmark en Julia.
Por el próximo mes estaré escribiendo un programa por día para algunos métodos
numéricos conocidos en Python y Julia. Está destinado a ser un ejercicio,
entonces no espere que el código sea lo suficientemente bueno para un uso real.
Además, debo mencionar que casi no tengo experiencia con Julia, por lo que
probablemente no será Julia idiomático sino Julia más parecido a Python.
Día 1: Método de bisección
El primer método a considerar es el
método de bisección.
Este método se usa para resolver la ecuación \(f(x) = 0\) para
\(x\) real, y \(f\) continua. Se empieza con un intervalo \([a,b]\),
donde \(f(a)\) y \(f(b)\) deben tener signos opuestos. El método procede
partiendo a la mitad el intervalo y seleccionando el subintervalo en donde
aparece la solución, es decir, el signo de la función cambia.
Usaremos la función \(f(x) = \cos(x) - x^2\) para probar los códigos,
y el intervalo inicial es [0, 1].
A continuación están los códigos:
Python
from__future__importdivision,print_functionfromnumpyimportlog2,ceil,abs,cosdefbisection(fun,a,b,xtol=1e-6,ftol=1e-12):iffun(a)*fun(b)>0:c=Nonemsg="The function should have a sign change in the interval."else:nmax=int(ceil(log2((b-a)/xtol)))forcontinrange(nmax):c=0.5*(a+b)ifabs(fun(c))<ftol:msg="Root found with desired accuracy."breakeliffun(a)*fun(c)<0:b=celiffun(b)*fun(c)<0:a=cmsg="Maximum number of iterations reached."returnc,msgdeffun(x):returncos(x)-x**2print(bisection(fun,0.0,1.0))
Con resultado
(0.824131965637207,'Maximum number of iterations reached.')
Julia
functionbisection(fun,a,b,xtol=1e-6,ftol=1e-12)iffun(a)*fun(b)>0c=nothingmsg="The function should have a sign change in the interval."elsenmax=ceil(log2((b-a)/xtol))forcont=1:nmaxc=0.5*(a+b)ifabs(fun(c))<ftolmsg="Root found with desired accuracy."breakelseiffun(a)*fun(c)<0b=celseiffun(b)*fun(c)<0a=cendmsg="Maximum number of iterations reached."endendreturnc,msgendfunctionfun(x)returncos(x)-x^2endprintln(bisection(fun,0.0,1.0))
Con resultado
(0.824131965637207,"Maximum number of iterations reached.")
En este caso, ambos códigos están bastante cerca. El código de Python tiene
25 líneas, mientras que el de Julia 27. Como se esperaba, los resultados
son iguales.
Edición (2017-10-02)
Como sugirió Edward Villegas, decidí comparar los tiempos de ejecución.
Usé %timeit para IPython y @benchmark (de BenchmarkTools)
para Julia.
En esta publicación describimos la solcuión de la ecuación de Schrödinger
usando el método de Ritz y base de
funciones de
Esta base parece ser una buena elección para la ecuación de Schrödinger
ya que es una base ortogonal sobre \((-\infty, \infty)\).
con \(\psi\) la función de onda, \(V(x)\) el potencial y
\(E\) la energía. Esta formulación variacional es equivalente a la
ecuación de Schrödinger independiente del tiempo, y \(E\)
funciona como un multiplicador de Lagrange que garantiza que la
probabilidad sobre todo el dominio sea 1.
Podemos expandir la función de onda en la base ortogonal
donde \(u_n(x) \equiv \mu_n H_n(x) e^{-x^2/2}\) es una función de
Hermite normalizada, \(\mu_n\) es el inverso de la magnitud del
\(n\)-ésimo polinomio de Hermite
La última integral se puede calcular usando la
cuadratura de Gauss-Hermite.
Y necesitaremos más puntos de Gauss si queremos integrar polinomios
de orden alto. Este método funciona bien para funciones que pueden
ser aproximadas por polinomios.
Ejemplos
Una implementación en Python de este método se puede encontrar en
este repo.
Para todos los ejemplos usamos las siguientes importaciones
Podemos dar formato a los gráficos de forma simple usando el
paquete de estilo
en matplotlib. La idea principal es crear un archivo con algunos
parámetros predefinidos (esto también puede hacerse a través de
rcParams).
Esta publicación no es un tutorial en cómo usar estos archivos, para
estos puedes mirar la página
style sheet reference.
Acá, quiero jugar un poco con algunos de los parámetros para crear tres
estilos diferentes. Los primeros dos tienen el estilo de un software
(infame para algunos), que es usado por la mayoría de las personas como
su plataforma de visualización, el tercero es un estilo limpio. Todos
los archivos usados se pueden descargar
aquí.
Para todos los ejemplos se realizan las siguientes importaciones:
En el segundo ejemplo queremos reproducir la prole del primer estilo
en este ejemplo. Este estilo es una mejora respecto al anterior,
pero no es perfecto.
En esta entrada encontramos las funciones de interpolación de Hermite
para el dominio [-1, 1]. Luego, las usamos para una interpolación a
trozos. Observe que esta interpolación tiene continuidad \(C^1\)
y no \(C^0\) como en la interpolación de Lagrange.
Para calcular los polinomios explícitamente podemos usar sympy.
Queremos encontrar una base con funciones que sastisfagan
Podemos ver que la matriz anterios e una matriz de Vandermonde confluente [1].
Es imilar a una matriz de Vandermonde para los primeros \(n\) nodos
y las derivadas de cada columna para los siguientes.
Los coeficientes de nuestros polinomios están dados por la inversa de esta
matriz.
En esta entrada quiero hablar de algunas herramientas (...o algo así)
que son útiles en el día a día de la investigación, pero que no suelen
ser tan populares por ser en cierta forma tangenciales al área
específica en la que cada uno trabaja.
Scripting
Un script es un
programa usualmente simple que realiza una serie de tareas. ¡Lo
siento! trato de ceñirme al castellano pero no me gustan las
traducciones para este término (archivo de órdenes, archivo de
procesamiento por lotes o guion). Si existe una tarea que debe ser
hecha más de... cinco veces (el número varía de acuerdo a la
paciencia), entonces creo que es algo que podemos pedirle al
computador que haga esta tarea por nosotros. En otras palabras:
podemos automatizar ese trabajo. Algunas tareas que pueden ser una
buena alternativa para automatizar son: renombrar 100 archivos,
convertir un archivo de un formato a otro (p. ej., STL a OBJ), leer
387 archivos con información sobre el clima y graficar su evolución
temporal (temperatura mínima, máxima y promedio). Estas tareas pueden
ser fáciles de hacer a mano, pero por la cantidad de trabajo que
involucran son tediosas.
Lo primero es hacernos con un lenguaje de scripting. Algunas opciones
son Python,
Bash,
Julia,
Matlab/Octave,
Scilab. Dejándome llevar por el sesgo,
recomiendo usar Python.
Gráficos y esquemas
Una imagen vale más que mil palabras, o eso dice el dicho.
Personalmente, me parece absolutamente cierto y trato de hacer
dibujitos para poder entender mejor algo o lograrlo explicar mejor.
Lo primero que me gustaría mencionar es la diferencia entre imágenes
de mapas de bits (o ráster) e imágenes vectoriales.
Imagen de mapa de
bits: es una imagen
que está representada por un arreglo (o rejilla rectangular) de
pixeles. Dicho de otro modo, se almacena la información de color que
hay en cada punto de la imagen. Los formatos más populares almacenan
la información comprimida. Para gráficos con alto contraste (como
esquemas o diagramas) el mejor formato es PNG. Si se tiene una
animación, GIF sería preferible. Y para el caso de fotografías es
mejor utilizar JPG.
Imagen vectorial:
es una imagen que está formada por entidades geométricas. En esta no
se almacena la información punto a punto sino la construcción de
las formas que la constituyen. Por esta razón, estas imágenes no se
pixelan pues la información que se tiene es de cómo construirla.
Este tipo de imágenes es la mejor opciones para esquemas y diagramas,
pues sólo se almacena la información de los trazos y texto que se
añadan en ellas (ver Figura 1). El estándar de facto para este tipo
de imágenes es PDF —es el que suelo para incluir en mis documentos
\(\LaTeX\), aunque existe forma de embeber SVG en \(\LaTeX\)
pero es algo que aún no exploro—. A pesar de que PDF sea el
estándar, el formato a preferir es SVG (Scalable Vector
Graphics)
que es un estándar a través de la internet y la mayoría de
navegadores modernos permiten visualizar.
Recapitulando, deberíamos usar imágenes JPG para fotografías y SVG
para esquemas/diagramas. Otro atributo que puede ser de utilidad es el
manejo de capas, SVG permite esto.... y de formatos ráster tenemos la
opción de usar TIFF.
En cuanto a software para generar/editar este tipo de imágenes debo
decir que existen gran cantidad de programas que permiten exportar a
estos formatos: Python/Matplotlib, Matlab, Inkscape, Adobe
Illustrator, GIMP, Photoshop, LibreOffice. Si el gráfico es generado a
partir de un cálculo o de una serie de datos yo uso Matplotlib. Si en
cambio, queremos hacer un esquema o —como suelo decir— un muñeco mi
herramienta favorita es Inkscape. Este
programa pretende ser una alternativa libre a programas como Adobe
Illustrator —y sí que lo consigue. Obviamente, se podría usar
Illustrator o Corel Draw para esta tarea. Si el único uso sería hacer
esquemas técnico, creo que sería un desperdicio.
Supongo que para algunos parecería un poco trivial hablar de "tomar
notas" y mucho más viniendo de alguien que no tenía cuadernos en el
bachillerato, pero como soy un poco terco creo que igual escribiré un
poco sobre esto. Lo primero que me gustaría mencionar es que recuerdo
que me hablaran de este tema en el colegio, pero nunca hubo nada
formal respecto a desarrollar estas habilidades. Buscando en la web,
hay gran cantidad de información. Incluso el artículo de Wikipedia en
inglés es interesante.
No hay nada mejor para escribir que tener una pluma y un papel de buen
gramaje, por eso es que aún uso un cuaderno en donde llevo cuenta de
lo que hago en mi investigación y tomo notas. Sin embargo, este
esquema es bastante lineal y deja por fuera oportunidades más
contemporáneas. Es decir ¿por qué conformarse con un documento en
este tiempo de hiper-documentos? Las ventajas de tomar notas
digitalmente saltan a la vista, en un hiper-documento se pueden tener
enlaces, embeber imágenes, video y sonido.
En cuanto a herramientas, acá incluyo una pequeña lista:
Evernote es probablemente la herramienta
más popular para tomar notas. Es multiplataforma, Freemium
(funcionalidad básica gratuita y avanzada paga), y cuenta con muchas
opciones. Yo la uso, pero no mucho en mi investigación.
Zim es una wiki offline. Tiene gran
cantidad de opciones como calendario, ecuaciones con código
\(\LaTeX\), imágenes... en fin. El pero que le encuentro es que no
he logrado configurar las ecuaciones en Windows (y en mi oficina debo
usar Windows :-/).
Docear esta es una herramienta pensada,
principalmente, para manejar bibliografía. Sin embargo, permite tomar
notas y, en general, manejar la información de la investigación. La
característica más (o menos) atractiva es que funciona alrededor de
mapas mentales.
Zotero también es una herramienta para
manejar bibliografía, aunque permite manejar algo de toma de notas
(al menos alrededor de la bibliografía).
Mendeley es muy parecido al anterior,
aunque con más funcionalidades. El pero más grande que le encuentro
es que en 2013 fue comprado por Elsevier.
En cuanto a manejo de bibliografía también me gustaría mencionar
EndNote que es el programa con mayor
trayectoria y JabRef que es el
que he usado por más tiempo. Algunas referencias interesantes
comparando manejadores de bibliografía están acá:
[A][B][C].
Reconstrucción de gráficos
Es común encontrarse con información presentada en forma de gráficos.
También es común que queramos tener los datos numéricos de estos
gráficos para poder compararlos con los nuestros. Para saber si
nuestras medidas/simulaciones/métodos dan resultados similares a otros
presentados en la literatura. Para esta tarea se pueden usar potentes
software de procesamiento de imágenes, u otros más modestos diseñados
específicamente para este fin.
Figura 2. Gráfico original.
Figura 3. Gráfico procesado en Engauge Digitizer. Algunos puntos
fueron seleccionados (automáticamente) para obtener sus coordenadas.
Digitizer of XY
chart
este es un plugin para Libreoffice/OpenOffice y exporta el resultado
a la hoja de cálculo actual, es simple y fácil de usar.
Engauge Digitizer, es el que
normalmente uso cuando necesito hacer esta tarea (ver Figuras XX). Es
de código abierto (y libre) y tiene una buena cantidad de opciones
para facilitar la tarea.
Plot Digitizer no tengo
mucha información sobre este (pues nunca lo he usado), salvo que está
escrito en Java.
ImageJ este es un (completo) programa
de procesamiento de imágenes que está escrito en Java. No lo he usado
para esta tarea de manera regular, pero podría usarse para ello.
Visualización científica
La visualización
científica
que se encarga de generar gráficos que permitan visualizar "datos
científicos" para facilitar el entendimiento que hay detrás de los
datos. Para esta labor muchos hemos usado lenguajes de scripting como
Matlab/Octave, Scilab o Python (con Matplotlib o Mayavi). Sin embargo,
como la visualización se trata de algo visual —¿como si no?—, es bueno
contar con una herramienta que permita generar y cambiar los gráficos
de manera interactiva, aunque siempre debemos automatizar la mayor
cantidad de trabajo posible (la pereza siempre ha sido uno de los
móviles más grandes de la humanidad, hay que aceptarlo).
MayaVi, este es un
programa escrito en Python que usa
VTK. Es una herramienta muy
versátil y la gran ventaja que tiene es que puede usarse dentro de
scripts
de Python.
Paraview, este programa también está
basado en VTK y permite paralelizar las labores (para los
computadores con múltiple núcleo y los clústers). Abajo incluyo un
video generado en Paraview para mostrar sus capacidades.
Visit,
este programa también está basado en VTK, nunca lo he usado pero
quise incluirlo porque la gente dice que puede ser más intuitivo que
Paraview.
Tecplot, este programa es muy popular
en Purdue. Creo que inicialmente fue pensado para CFD, pero se ha
expandido mucho. En cuanto a gráficos 3D no me parece mejor que
ParaView, sin embargo, las capacidades de gráficos 2D (gráficos XY, y
demás) lo hacen atractivo.
Scavis, este está escrito en Java. No
lo conocía hasta que inicie la escritura de esta entrada pero me
llamó la atención y quise incluirlo en la lista. Algo que me llamó
la atención es que permite scripting en varios lenguajes: Java,
Python, Ruby, BeanShell y Matlab/Octave.
Origin, nunca lo he usado pero no lo
quise dejar por fuera porque siempre he oído hablar maravillas de él
(probablemente compárandolo con Excel... pero no puedo opinar).
El manejo de
versiones es la
administración de cambios en documentos, código fuente y otro tipo de
información. Esto puede hacerse de forma manual, pero es fácil cometer
errores o remplazar la versión de un código fácilmente, y por esto es
recomendable usar un software que facilite el trabajo. La idea es
tener un lugar (repositorio) en donde se almacenan las versiones y
los cambios, y llevar un registro de estos. De esta forma se puede
volver a una versión anterior de los documentos y varias personas
pueden trabajar conjuntamente. Existen dos paradigmas (o
arquitecturas) para el manejo de versiones: centralizada y
distribuida. En la primera existe un repositorio centralizado en donde
se encuentra toda la información. En la arquitectura distribuida cada
usuario tiene una copia del respositorio. Personalmente sólo he usado
Git, que entra en la categoría distribuida y
es uno de los software de manejo de versiones más populares
actualmente; lo usan compañías como Google, Facebook y Netflix.
Un ejemplo puede verse en este
repositorio, en donde
está el documento de trabajo de grado de Santiago Echeverri, el cual
tuve la oportunidad de asesorar. Este documento lo editamos
conjuntamente mientras él estaba en Medellín y yo me encontraba en
Estados Unidos. El documento se hizo en el lenguaje de marcadores
\(\LaTeX\).
Además de tener un control sobre las versiones y poder acceder a
versiones anteriores, es útil poder almacenar la información en un
lugar accesible desde cualquier lugar del mundo con una conexión a
internet. Esto puede lograrse con un servidor propio, obviamente, o
también a través de un proveedor externo. Dos proyectos que son muy
populares para alojar repositorios y manejar sus versiones son
(comparación entre Github y
BitBucket):
Github es el más popular en este momento.
Permite tener proyectos con un número ilimitado de colaboradores.
Para tener un repositorio privado es necesario pagar.
BitBucket tiene como principal ventaja que
permite tener repositorios privados sin la necesidad de pagar. Sólo
es gratuito para proyectos con 5 colaboradores o menos (o para
proyectos académicos).
Mirando en internet no encontré una versión en español de la fábula de
Esopo "La zorra y las uvas" que me gustara (o que al menos rimara :P).
De hecho, el artículo de Wikipedia en
español es
bastante más malo que su equivalente en
inglés. Por
esto, y por petición de una amiga, hice mi versión con rima asonante. Y
reza así
El año pasado el niño dios me regaló una Samsung Galaxy Note
10.1
(modelo 2012). Esta tableta viene diseñada para tomar notas, pues trae
un S-Pen (fabricado por Wacom, que creo que fabrican la
tecnología
para la mayoría de tabletas comerciales) y varias aplicaciones
pensadas para ello. Como: S Note, PhotoShop Touch, Crayon
Physics (tienen que jugarlo es muy
divertido).
Decidí entonces hacer un experimento tomando notas de clase con mi
tableta completamente en las dos materias que cursé en el "semestre"
de primavera de 2014. En Optimización usé el lapiz que viene con la
tableta y para Física Molecular usé un Bamboo
Stylus
que, se supone, es diseñado específicamente para esta tableta. Las
notas las tomé con el software por defecto (S Note) y convertí a PDF
(las notas fueron hechas enteramente con el software):
Aunque la sensación al tacto del Bamboo Stylus es mucho más agradable,
el desempeño del S Pen es mucho mejor. En ambos casos, la sensación es
muy diferente a la de usar papel y lápiz (lapicero/pluma), en gran
medida porque la fricción es muy poca en comparación (algo que es
mejor con los lapices conductores). La experiencia de usuario del
lápiz varía mucho entre una aplicación y otra, lo que genera buenas
expectativas. En cuanto a tomar notas: es muy recomendado para tomar
notas cortas (como reuniones); no tanto para tomar notas largas (como
notas de clase), a menos que se quiera tener una copia digital
fácilmente.
Apps
La tecnología detrás de la tableta es la parte más importante. De
manera simple y rápida, el lapiz tiene una antena y la tableta una
rejilla de antenas que están sintonizadas en la misma frecuencia (531
kHz, en este
enlace
explican su funcionamiento un poco mejor). Sin embargo, también es
importante tener en cuenta el software que se usa para tomar nota:
Tiene reconocimiento de formas y ecuaciones. Las ecuaciones deben ser
simples, no esperen tomar notas de Mecánica Cuántica o Mecánica del
Medio Continuo usado esta herramienta.
Permite insertar imágenes y grabar sonidos dentro de la aplicación.
Es open source, aunque si lo adquieren a través de la "Google Store"
tiene costo.
El algoritmo de reconocimiento de trazos es mejor que el de los otros
software (y es ajustable).
Aún está en una etapa preliminar.
Lástimosamente no hay una versión de
Paper (de
FiftyThree) para Android, y, aunque existe una versión de Bamboo
Paper (de Wacom)
para Android no es compatible con esta tableta.
En conclusión
Remplazar la toma de notas "tradicionales" por notas "digitales"
puede ser un poco apresurado, pero es realizable. La aplicación que
viene por defecto (S Note) permite realizar el trabajo "out of the
box", pero podría ser mejor. Las aplicaciones que me parecen más
promisorias son: Note Anytime y Quill.
Cuando estaba en el colegio, en ocasiones mencionaban las palabras terminadas
en "ar", "er" o "ir" —iguales al final de nuestros verbos en infinitivo— que no
eran verbos. Eran pocos ejemplos los que mencionaban, así que algunos años
después me dio el arrebato de hacer una
lista… y hela aquí:
AR
AR
AR
ER
IR
agar
dispar
pajar
alfiler
cachemir
ajuar
ejemplar
paladar
alquiler
casimir
alar
escolar
palatar
amater
elixir
albañar
espectacular
palomar
anteayer
emir
albar
estelar
papilar
antier
faquir
alfar
extracurricular
par
atelier
kefir
alizar
familiar
paramilitar
ayer
menhir
almiar
fular
particular
bachiller
nadir
almimbar
globular
peculiar
bereber
porvenir
alminar
hangar
pendular
brigadier
sir
altar
hogar
peninsular
canciller
souvenir
alveolar
ijar
perpendicular
cualquier
visir
antealtar
impar
pilar
doquier
zafir
antisolar
insular
pinar
dossier
ar
intercelular
planar
enser
auricular
intraocular
polar
ester
avatar
jaguar
policelular
menester
axilar
juglar
pulgar
mercader
azahar
lagar
pulmonar
micer
azar
lanar
quasar
neceser
bacillar
lar
radar
palier
bar
limonar
radicular
placer
bazar
llar
rectangular
plumier
bicelular
lobular
reticular
premier
bienestar
lodazar
samovar
primer
bifilar
lugar
secular
rosicler
biliar
lunar
seglar
salmer
billar
malar
semicircular
somier
binocular
maleolar
semilunar
sumiller
bipolar
malvar
similar
taller
broncopulmonar
mandibular
solar
tercer
bulevar
manglar
subcelular
veguer
calamar
manillar
supraclavicular
calcañar
manjar
supralunar
capilar
mar
telar
capsular
maxilar
testicular
caviar
melocotonar
tisular
celular
melonar
trifilar
centenar
membrillar
trufar
ciliar
miliar
tubular
clavicular
militar
tular
collar
millar
ultramar
consular
molar
uvular
coplanar
mollar
vascular
crepuscular
muladar
vehicular
corpuscular
monocelular
vermicular
cuadrangular
mular
vesicular
cular
muscular
vulgar
curricular
nuclear
yugular
dactilar
ocular
zar
dinar
olivar
Si tienes alguna sugerencia de palabra que haga falta la puedes dejar en los
comentarios.
Última actualización: Octubre 21, 2022.
Descargar la lista en formato CSV o en formato
XLS.
Alguna vez una amiga me preguntó sobre cuál era más fácil de dos métodos para
teletransportar personas. Uno consistía en "desconfigurar" y "reconfigurar" a
la persona (como información, similar a Start Trek
y la otra en "crear un atajo" entre dos lugares del espacio-tiempo para pasar
a la persona. Obviamente, en ambos casos suponiendo que tales cosas se pueden
hacer.
Respecto a la creación del atajo en el espacio-tiempo, creo que no he
estudiado las ecuaciones de Relatividad General para poder hacer las cuentas,
aunque tal vez en Física Pasión
nos regalen estos cálculos.
La primera de las alternativas consiste,
básicamente, en la representación de una persona como información y su
procesamiento de "desconfiguración", transmisión y procesamiento de
"reconfiguración". Ya que los humanos estamos hechos, mayormente,
de agua asumiremos una persona de agua para los cálculos. Además tomaremos
como masa de referencia \(70\ \mbox{kg}\).
Algunos datos que usaremos
son:
La masa molar del agua es \(M_{H_2O}=18,01528\ \mbox{g/mol}\);
El número de Avogadro es \(N_A=6,022 \times 10^{23}/\mbox{mol}\).
Entonces tendríamos que el número de moléculas en una persona es
El agua tiene 12 modos vibracionales y 6 traslacionales, y además 40 números
cuánticos electrónicos. Lo que suma un total de 58 grados de libertad por
cada molécula. Así que el número total de grados de libertad es
En 2011 hubo un record de transmisión
de 186 Gb/s, considerando esta tasa el tiempo que tardaría en transmitirse la
totalidad de los datos (asumiendo datos representados como reales de 32 bits)
tardaría \(2,3\times 10^{16}\ \mbox{s}\) o, equivalentemente,
\(1,70\times 10^{10}\) años (la edad estimada del universo es de
\(1,37\times 10^{10}\) años).
Si quisiéramos que esto pasara realmente rápido, digamos en 1 milisegundo,
la tasa de transmisión debería ser \(2,3\times 10^{19}\) más rápida que el
récord que alcanzaron en el CERN… algo que es inconcebible para nosotros
actualmente.