Al hacer física computacional, por ejemplo, simular ecuaciones diferenciales en la computadora, ¿cuál es el lenguaje elegido por los físicos experimentados?

Internamente, tanto Numpy como MATLAB confían en LAPACK (escrito y optimizado en FORTRAN) para trabajos de álgebra lineal eficientes. Los solucionadores numéricos probablemente también estén vinculados a algún tipo de biblioteca escrita en C o FORTRAN. Hay algunas bibliotecas numéricas C y FORTRAN (y C ++) muy optimizadas y estables. En muchos casos, los científicos encuentran que la programación en C o FORTRAN consume mucho tiempo, por lo que prefieren un lenguaje de alto nivel como python o matlab. Matlab tiene una historia más larga, por lo que hay muchos códigos y paquetes existentes que son buenos para llevar. Numpy se está poniendo al día bastante bien y algunos encuentran que Python es un lenguaje más fácil de usar. Pero estas elecciones a menudo se reducen a preferencias personales, la que le enseñaron en la escuela.

Mathematica es una bestia ligeramente diferente porque en realidad es un sistema algebraico por computadora en lugar de un lenguaje que se nutre de la computación numérica.
No es que cada idioma solo pueda hacer una cosa exclusivamente. Cada idioma generalmente puede hacer una cosa mejor que otra. MATLAB también tiene un paquete de cálculo simbólico que no es tan avanzado como Mathematica.

La elección del idioma a menudo depende de la demanda de su programa y del entorno en el que lo esté ejecutando. Por ejemplo, si desea aprovechar las ventajas de la capacidad informática de las GPU, probablemente utilizará CUDA, que está cerca de C ++. En un entorno de supercomputación / clúster, C o FORTRAN le permiten escribir código muy cerca del metal, pero Python y MATLAB le permiten escribir código más fácil de leer y más portátil. Un físico computacional decente probablemente conocería al menos un lenguaje de nivel inferior como C / FORTRAN y uno de nivel superior como Python / MATLAB / MATHEMATICA.

ps Cython le permite escribir código similar a Python, que luego se compila en un archivo ac, que luego se compila en un objeto binario, que puede volver a importar en el código Python. Esto le permite precompilar la parte más numéricamente exigente del código y, por lo tanto, acelera su código en general.