2010-12-11 15 views
16

Soy un usuario difícil de matlab, sobre todo porque esto es lo que aprendí primero y no he encontrado un problema con una diferencia lo suficientemente significativa como para cambiar. Vengo de la optimización numérica/álgebra lineal, donde realicé cálculos de optimización y eigenvalue en millones de grados de libertad. Recientemente, he entrado en el reino de la aleatoriedad, donde originalmente estaba bajo la impresión de que me vería obligado a cambiar. Pero, después de optimizar el código y de inicializar cuidadosamente la semilla al generador de números aleatorios, puedo hacer las mismas tareas de Monte Carlo que mis contemporáneos más o menos al mismo tiempo. Mi comprensión ha sido que las declaraciones 'if' a nivel base, etc., son significativamente más lentas en matlab. Sin embargo, si hay cálculos significativos dentro de cada ciclo que pueden ser vectorizados, no estoy convencido de que C sea mejor. Y, de todos modos, parece que a matlab le va bien, en el sentido de que mi límite superior es nada menos que cualquier otro profesional (y en muchos casos, parece ser más). Tengo la sensación de que recibiré muchas respuestas de personas pro-C aquí, que han descartado matlab hace mucho tiempo como un lenguaje de juguete trivial. Soy un investigador profesional y sostengo que matlab es competitivo para la programación matemática intensiva computacional de más alto nivel. Me equivoco ? ¿Debo considerar cambiar a un lenguaje de nivel inferior, como C/FORTRAN? Por qué o por qué no ? ¿Hay otros como yo? ¡Muchas gracias! Cheers¿Matlab (vs. C/FORTRAN) es un lenguaje respetable para un investigador matemático profesional del siglo XXI?

+0

Je. bueno, si bien ** es ** una pregunta perfectamente legítima para este foro, * esta * es una pregunta que probablemente obtendría una mejor respuesta en www.mathoverflow.com, donde se concentran las investigaciones profesionales en matemática. – RBarryYoung

+1

+1, pregunta interesante. No estoy calificado para dar una respuesta adecuada, pero tuve preocupaciones similares hace unos años como estudiante de física computacional. En el momento de nuestro departamento tenía muchos programadores Fortran/C recalcitrantes que no reconocieron mucho beneficio en herramientas de alto nivel, pero yo espero que las cosas han cambiado, con la facilidad de paralelización y agilidad cada vez más importante que la ejecución de un solo núcleo prima velocidad. – SimonJ

+5

Por favor, haga wiki comunitario. –

Respuesta

2

Bueno, soy más un programador de C++/Java que uno de Matlab, aunque he usado Matlab, pero creo que para la investigación matemática, Matlab es bastante adecuado. La investigación es algo que implica mucha experimentación, y C++ es un lenguaje difícil para experimentar. Matlab hace que sea muy fácil probar cosas rápidamente, descubrir cuáles funcionan y cuáles no, y seguir adelante. Siempre puede codificar sus soluciones en otro idioma una vez que sepa lo que quiere hacer, asumiendo que la versión de Matlab es demasiado lenta (por la cantidad limitada que he visto de ella, a veces lo es, otras veces no).

En pocas palabras: es posible que no desee utilizar Matlab para todo (la frase "si todo lo que tiene es un martillo, todo parece un clavo" viene a la mente), pero ciertamente es un buen lenguaje para la tarea específica de investigación matemática.

2

También me gustaría considerar el software Mathematica que es grande para algunos de los matemáticos necesidades han

+2

Pero para el trabajo numérico, no estoy seguro de que aconsejaría a OP que cambie a Mathematica. –

16

trabajo con un equipo de geofísicos de investigación profesional aunque yo soy más de un ingeniero de software numérico mí mismo. Creo que si tu trabajo es matemático numérico, entonces Matlab es muy adecuado, especialmente porque ya eres hábil en su uso.

Puede escribir programas más rápidos si recogió C o Fortran, aunque tal vez no tanto más rápido de lo que podría esperar ya que Matlab utiliza, para muchas de sus rutinas numéricas, las mismas bibliotecas BLAS (etc) que si estabas escribiendo en C o Fortran. Pero a partir de mi experiencia laboral, mis colegas consideran que la posibilidad de escribir programas más rápidamente es mucho más importante que escribir programas más rápidos. Generan muchas ideas que, luego de reflexionar, luego rechazan. La velocidad de desarrollo añadida que da Matlab por encima de C y Fortran significa que atraviesan el ciclo completo (que generalmente incluye la visualización de los resultados) mucho más rápido y lo hacen con más frecuencia, haciendo más ciencia mediante alguna medida cruda.

(Como comentario aparte: uno de los trabajos que obtengo es convertir algunos de los códigos de Matlab que no se rechazan en los programas de Fortran para su ejecución en los grandes grupos de la compañía. Pero eso es lo que sucede con algunos de nuestros códigos cuando la investigación está completa y queremos implementarlos para la producción.)

También señalaría que Matlab tiene buenas capacidades de computación en paralelo (si puede pagarlas) a través de Parallel Compute Toolbox, que probablemente será de interés a medida que sus problemas crezcan y se dé cuenta de que está infrautilizando algunas de sus núcleos, Dios mío, incluso tiene integración con la computación GPU en la última versión.

En pocas palabras, sugeriría que quedarse con Matlab le permitirá centrarse en su investigación matemática y no desviar su atención a la lucha con un nuevo conjunto de herramientas. Sobre todo porque no sugiere que Matlab sea inadecuado para sus necesidades esperadas.

+7

+1 para "es más importante escribir programas rápidamente que escribir programas rápidos". – Jonas

+0

@Jonas: +1 con fines de investigación, donde a menudo eso es cierto; aunque no es el caso más general. Muchos sistemas tienen restricciones en tiempo real. Incluso su procesador de textos lo hace: no preferiría que mi procesador de textos fuera entregado antes si tardara 5 minutos en escribir cada carácter. –

+2

@Stuart Golodetz: En realidad, incluso para fines de investigación, cada vez que el usuario interactúa directamente con el sistema, tiene que ser rápido. Sin embargo, una vez que el usuario ha golpeado "run", está bien si se toma un tiempo, siempre y cuando funciona en absoluto (y solo he tenido una discusión ayer con un colega en los que han estado luchando con un problema para el que no parece que no hay algoritmo de trabajo en este momento). – Jonas

0

Creo que matlab está bien para ti, porque c es un lenguaje de propósito general, mientras que matlab está diseñado para matemáticas.

0

sobresale en Matlab:

  • alto nivel de matemáticas de matriz (justo calcular A * B, usted no tiene que llamar A.multiply (B) o alguna sintaxis de C++/tipo Java)
  • análisis de datos
  • visualización de datos
  • interfaz con Java

y hay suficientes bibliotecas/herramientas para hacer casi cualquier cosa en una forma fácil (pero no necesariamente optimizado) forma en que puedes seguir trabajando en MATLAB una vez que comiences.

Odiaría utilizar algún paquete de software que sea genial para, digamos, matemáticas matriciales, pero luego cuando voy a hacer otra cosa, es pésimo y tengo que elegir entre aceptar esa miseria o abandonar mi trabajo y usando diferente software.

0

Definitivamente verá que Matlab es rápido en algunos puntos, pero cuando necesita cosas especializadas como la administración manual de la memoria para trabajar con un vector que excede lo que Matlab quiere darle, tendrá que pasar por algunos aros.

Estoy seguro de que puede hacer todo rápido y fácil en Matlab, pero he llegado a verlo como bastante engorroso en términos de elegancia y legibilidad posterior a la optimización. Las matemáticas vectoriales son ciertamente divertidas y rápidas, pero a veces me resulta difícil detectar las dimensiones.

Yo diría que se quede con lo que sabe, y cambie cuando esté convencido de que Matlab no puede hacerlo. Aprender otro idioma es difícil, especialmente cuando desea un código rápido y cálculos numéricos.

En una nota al margen, prefiero C++, junto con algunas bibliotecas increíbles (GSL, Eigen, etc.). Lo curioso es que todavía hago mis tramas en Matlab, porque conocí muy bien esa parte de Matlab :)

4

Hablando como alguien que se mueve entre la academia y la industria en el campo de la ingeniería, la única razón por la que no lo hago t utilizar Matlab más es por el costo. Si usted y todas las personas a quienes desea otorgar el código tienen licencias de Matlab, entonces no hay razón para cambiar.

Si encuentra que es necesario optimizar partes de su código, puede reescribir esos bits en un lenguaje de nivel inferior y llamarlos desde su programa Matlab. El cambio de idiomas por razones de rendimiento es un caso de optimización prematura, en mi opinión.Resuelvo problemas de computación intensiva en un proceso iterativo:

  1. Armar una solución en la forma más rápida y más sencilla en primer lugar, que en su caso significa utilizar el idioma que mejor sabe.
  2. Ejecútelo con un conjunto de datos limitado usando un generador de perfiles y descubra dónde están los cuellos de botella.
  3. Arregle el peor cuello de botella, usando cualquiera de los siguientes métodos: a) Cambie el algoritmo, b) optimice usando las características del entorno de desarrollo actual, c) vuelva a escribir ese bit de código en algo que se ejecute más rápido para ese problema en particular.
  4. Regrese a 2. hasta que su ecuación de tiempo de ejecución/tiempo de desarrollo alcance el umbral con el que se sienta cómodo (o, si es un estudiante graduado, hasta que su supervisor le grite que DEJE DE ENCENDER CON LO SANO Y JUSTO CORRE YA).

En otras palabras, no se preocupe por el rendimiento hasta que se convierta en un problema, especialmente si está escribiendo código para su propio uso.

4

Si está involucrado principalmente en algoritmos de creación de prototipos que implican estructuras de datos simples, matlab es una gran opción. El flujo de trabajo de muchos académicos que trabajan en campos computacionales es: desarrollar un nuevo algoritmo, verificar que funcione en matlab, luego escribir su artículo, y listo. Si esto es todo lo que desea hacer, quédese con lo que sabe (matlab).

Si desea hacer más que eso ... Well Fortran y C/C++ no son directamente comparables con Matlab porque simplemente no hay razón para usar un lenguaje compilado a menos que el rendimiento sea crítico. Python, por otro lado, tiene un conjunto de características similar a matlab, además de ser un lenguaje de programación completo y gratuito con una vibrante comunidad en línea. Las desventajas de cambiar a python son sorprendentemente insignificantes, y las ventajas son enormes. Extraño algo de la sintaxis de manejo de matrices de Matlab, ya que Numpy (el módulo de Python para la manipulación de matrices) tiene algunos caprichos, pero eso es todo. Cambié de matlab a Python recientemente, y no pienso volver. Matlab parecía hacerme escribir código de la peor manera posible. Mi código python es mucho más limpio, más modular y más fácil de leer. Además, el sistema de documentación de Sphinx es excelente.

En resumen, considere pitón si:

  • Usted va a tener que mantener una gran base de código
  • Usted quiere que su proyecto de código abierto y que los demás contribuyan
  • Usted quiere hacer su código disponible para personas sin licencia de matlab
  • Desea escribir sus propias estructuras de datos personalizadas que no sean matrices (árboles, gráficos, ...)
  • Es necesario implementar el código no numérico (buscar en los directorios locales, descarga de urls, encontrar archivos locales utilizando expresiones regulares, procesamiento de texto)
  • desea generar la documentación increíble facilidad y eficacia no
  • Haces quiere gastar dinero en efectivo en una licencia de MATLAB

Aquí hay un enlace para el pitón argumentando sobre MATLAB para la investigación científica: http://www.stat.washington.edu/~hoytak/blog/whypython.html

Aquí hay un enlace autoindulgente que muestra el increíble potencial del pitón Esfinge a generar automáticamente hermosa documentación en línea que integra a la perfección las derivaciones matemáticas y el código fuente real: http://pythonhosted.org/fit_neuron/overview.html

Python parece estar a punto de convertirse en EL estándar en informática científica, por lo que definitivamente vale la pena aprender.

Cuestiones relacionadas