El curso Python / NumPy es probablemente el mejor camino a seguir, especialmente porque es posible que desee ampliar este proyecto. Recomiendo usar los complementos de Pylab que hacen que Python / Numpy esté lo más cerca posible de Matlab [0].
Supongo que no va a escribir integradores personalizados para su PDE / ODE específica [1], por lo que los integradores en SciPy / NumPy probablemente sean suficientes.
En mi experiencia con la resolución de grandes sistemas de EDO, la verdadera compensación en el uso de Python en lugar de C ++ o Fortran es la gran pérdida de velocidad. Para tener una idea de por qué ocurre esta diferencia, importe BLAS o LAPACK en C ++ y en Python (por ejemplo, solo use NumPy) y luego ejecute una secuencia en un programa que multiplique dos matrices. Verá que Python pierde una cantidad significativa de tiempo haciendo llamadas que podrían ser redundantes [2]. No veo ninguna razón para usar Matlab a menos que tenga necesidades de integración muy específicas. Matlab tiene algunas herramientas excelentes para sistemas dinámicos que Python no tiene (por ejemplo, Dfield [3]), pero dependiendo de su análisis, no estoy seguro de si esto ayudará. En mi experiencia, he encontrado que Matlab es bastante más lento que hacer cosas en Pylab.
- ¿Cuáles son los problemas de física más interesantes aún por responder? ¿Hay algo fuera del campo de la investigación cuántica?
- ¿Cuál es la fuente matemática del enredo cuántico?
- ¿Pueden dos partículas que no estaban enredadas entre sí antes de enredarse?
- ¿Qué innovaciones no obvias permitiría la computación cuántica?
- ¿Cómo la computadora cuántica considera todas las posibilidades simultáneamente?
En términos de cómputo paralelo, Python es un lenguaje adecuado para hacer algunas pruebas básicas, pero realmente desea escribir cosas en C ++ / Fortran. Si tiene un clúster, usar OpenMPI en Python es bastante fácil y es una buena manera de ver qué tan paralelo es su código.
Como nota final, mi flujo de trabajo personal con análisis numérico es aproximadamente el siguiente:
- Codifique un script de prueba en Python para mi cálculo. Intente hacerlo lo más modular posible [4] (p. Ej., Tenga un script que realice la integración, otro script que valide el paso de integración, otro que haga cumplir las condiciones de contorno).
- Haga algunas pruebas del tiempo que toma, vea si hay algo que pueda ser paralelo
- Si es súper lento, tome mi código Python como esqueleto para el código C ++. Si es tan vergonzosamente paralelo como sea posible, entonces intentaré editar mi código para usar OpenMPI (que es bastante fácil de hacer)
¡Espero que esto ayude! No dudes en hacerme cualquier otra pregunta que tengas, también soy bastante nuevo en esto.
[0] http://www.scipy.org/PyLab
[1] Esto realmente hace una gran diferencia al hacer simulaciones. Sin embargo, el problema es que se necesita una enorme cantidad de esfuerzo para encontrar el integrador simpléctico “correcto” para su sistema. También es bastante fácil codificar una integración como Verlet o Symplectic Euler en Python, por lo que siempre puede tener integradores ‘pseudo’-personalizados en los que cambie algunos parámetros pero no el algoritmo principal en sí.
[2] Esto también podría ser culpa de NumPy, no estoy seguro. Tengo algunos compañeros de trabajo que han enumerado una serie de fallas de diseño en NumPy y por qué se considera mal escrito. Sin embargo, no he tenido ningún problema directo con NumPy, así que realmente no puedo dar más color sobre estos defectos de diseño.
[3] http://math.rice.edu/~dfield/dfp…
[4] En Python generalmente uso el truco if __name__ == __main__
para tratar mis programas independientes como módulos.