Esta semana traemos de mano de David Marqués García, alumno de cuarto de Física de la Universidad Autónoma de Madrid, una comparación de las ventajas y desventajas de utilizar el lenguaje de programación Python en los cálculos y simulaciones utilizados en la Física.
Introducción.
Dentro de los muchos lenguajes que podemos utilizar a la hora de programar y realizar simulaciones se encuentra Python, un lenguaje que se utiliza para muchas cosas, pero que a la hora de realizar simulaciones se encuentra con muchas ventajas y algunos inconvenientes.
En este artículo vamos a estudiar un poco por encima cuáles son esas ventajas e inconvenientes, así como qué se puede hacer con Python y cómo funciona, para comprender un poco más este lenguaje de programación.
Python como lenguaje
“Python es un lenguaje que te permite trabajar más rápidamente e integrar tus sistemas de manera más efectiva”. Esta cita, sacada de la página web de Python (16/10/18), resume bastante bien el objetivo de este lenguaje de programación. Python es útil a la hora de desarrollar redes y páginas web, al realizar cálculos científicos y numéricos (en esta parte estaremos interesados nosotros), en educación, en desarrollo de software, …
El número de ámbitos y modos de aplicar este lenguaje a esos ámbitos es bastante elevado, pero nos interesa el ámbito científico, que es donde nos encontramos nosotros. En este ámbito, nos centraremos en el entorno Spyder (Scientific PYthon Development EnviRoment), un entorno en el que los cálculos matemáticos y científicos se soportan con bastante facilidad.
Pero antes de eso, veamos un poco más sobre este lenguaje. Python es un lenguaje de programación interpretado. Es decir, que interpreta lo que el programador escribe, analizando y ejecutando los programas internos que el programador haya pedido ejecutar. Se diferencia de C o de C++ en que estos dos lenguajes requieren primero de una compilación previa, donde se traduce todo el código al lenguaje de la máquina, para luego ejecutarlo. La principal ventaja del lenguaje interpretado es que al ir traduciendo línea por línea según se necesita ejecutar, no presenta los problemas que pueden presentarse con un lenguaje que requiere de una compilación previa, sobre todo cuando se crean programas que ejecutan otros programas.
Otra de las ventajas de Python frente a otros lenguajes es que es de código abierto, queriendo esto decir que es gratuito y que todo el mundo puede mejorarlo. Esto tiene también un gran inconveniente, que reside en que hay muchos comandos que varían bastante de versión en versión, además de que múltiples versiones pueden estar circulando a la vez, y que determinados programas que funcionaban en la versión anterior pueden no funcionar en la nueva versión.
Python en simulaciones
Dentro de Python y, más concretamente, dentro del entorno de Spyder, nos encontramos con una interfaz que nos permite importar diferentes librerías mediante el comando “import”. Esto nos permitirá utilizar otros comandos que no están disponibles en el lenguaje básico de Python o Spyder.
Python, al contrario que Matlab u otros programas, no trabaja con matrices por defecto, mas puede programarse de tal manera que se dote de una serie de características a un objeto, y que este objeto reaccione de una manera concreta al encontrarse con otro. En este sentido, es muy útil en el ámbito de la simulación educativa, ya que permite visualizar muy claramente determinadas interacciones. Para esto resulta muy útil la biblioteca vpython, que nos abre un host en una pestaña del navegador web y nos permite visualizar objetos en movimiento.
Otras bibliotecas que también resultan útiles, tanto para los cálculos como para controlar tiempos y representar los resultados en un gráfico, son numpy, que nos permite crear vectores, timeit, para controlar los tiempos que tardan nuestros programas o pylab, para representar en gráficas.
Diferentes simulaciones físicas
Dentro del campo de la física hay miles de diferentes simulaciones disponibles, desde espines orbitales o interacciones moleculares hasta movimientos estelares, pasando por dinámica de fluidos, trayectorias, mecánica estadística, …
Aquí es donde la cosa se pone complicada, pues Python no resulta ideal para todos estos ámbitos, ya que como ya hemos visto, necesita importar bibliotecas para crear vectores, por lo que cualquier simulación en la que se trabaje con vectores no será óptima en Python. Otros lenguajes, como por ejemplo Matlab, que trabajan con matrices sí destacarán en esos cálculos. De todas estas simulaciones, aquellas en las que Python puede destacar son aquellas en las cuales el cálculo no dependa de una matriz o un vector complejo, sino que éste se utilice, si se utiliza, para guardar ese valor que nos ha dado el cálculo numérico.
Ventajas e inconvenientes
Hemos visto que Python y Spyder no son adecuados para según qué tipo de simulaciones, pero ¿para qué tipo de simulaciones sí son adecuados y qué inconvenientes tienen en esas simulaciones?
Mientras no requiera de un cálculo matricial complejo y podamos definir una variable como un número, (aunque después esa variable la guardemos en una matriz o vector para conservar los valores de ésta, Python), en el entorno Spyder, funciona de manera bastante eficiente. Sin embargo, la mayor viabilidad de Python y Spyder se da a la hora de hacer simulaciones demostrativas.
Utilizando la librería vpython es relativamente fácil hacer animaciones de las trayectorias de los planetas, de una pelota rebotando elásticamente dentro de una caja, o de cualquier otro sistema que se nos ocurra. Estas animaciones pueden ser muy útiles para mostrar, a nivel conceptual, diferentes ideas relativas a la física y sus fenómenos, como el movimiento de los planetas o el rozamiento. Además, con un diseño inteligente del programa, se puede conseguir que sea relativamente fácil trastear con ciertos valores de algunas variables fijas, que nuestro programa no varía, y permite que cada uno vaya explorando cómo sería el sistema solar si mercurio tuviese la misma masa del sol, o si la tierra estuviese en el centro del sistema, por poner un ejemplo.
Conclusiones
Como en casi todos los lenguajes de programación, Python tiene una serie de ventajas e inconvenientes a la hora de simular y representar diferentes fenómenos físicos. Es adecuado para representar los movimientos planetarios, mas no es conveniente usarlo para reproducir el modelo de Ising de la magnetización, al no ser las matrices un elemento nativo de la programación de Python. Al final, según qué fenómeno físico desees modelizar, será necesario escoger el programa que mejor trabaje con los elementos con los que necesitarás trabajar.
Python tiene muchas ventajas frente a Matlab, ya que es un lenguaje mucho más estructurado y viable más allá del simple cálculo de variables, mas Matlab sobresale en el cálculo matricial. Igualmente, Python también tiene muchas ventajas frente a C y C++, ya que no es necesario compilar los programas y es más permisivo que estos lenguajes a la hora de cometer determinados fallos de programación, sin embargo, C y C++ superan a Python a la hora de crear programas ejecutables.
En resumen, según qué fenómeno físico y qué modelo de ese fenómeno quieras representar, será más conveniente elegir un lenguaje u otro.