sobre - ¿Es Matlab(vs. C/FORTRAN) un lenguaje respetable para un investigador matemático profesional del siglo XXI?
todo sobre matlab (8)
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 está bastante bien adaptado. La investigación es algo que involucra mucha experimentación, y C ++ es un lenguaje grave en el cual se hace la experimentación. Matlab hace que sea muy fácil probar las 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, a veces no lo es).
Conclusión: es posible que no quiera usar 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 la investigación matemática.
Soy un usuario de matlab, principalmente 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 he realizado cálculos de optimización y valor propio en millones de grados de libertad. Recientemente, he entrado en el ámbito de la aleatoriedad, donde originalmente tenía 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 casi al mismo tiempo. Mi entendimiento ha sido que las declaraciones de ''base'' de nivel base, etc., son significativamente más lentas en matlab. Sin embargo, si hay cálculos significativos dentro de cada bucle que pueden vectorizarse, no estoy convencido de que C sea mejor. Y, de todos modos, parece que Matlab está bien, en el sentido de que mi límite superior no es menos que cualquier otro profesional (y en muchos casos, parece ser más). Tengo la sensación de que obtendré muchas respuestas de las personas pro-C aquí, que han cancelado Matlab hace mucho tiempo como un lenguaje de juguete trivial. Soy un investigador profesional y sostengo que matlab es competitivo para el más alto nivel de programación matemática intensiva en computación. 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! Aclamaciones
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.
Hablando como alguien que se mueve entre la academia y la industria en un campo de ingeniería, la única razón por la que no uso Matlab más es por el costo. Si usted y todas las personas a las que desea dar el código para tener licencias de Matlab, entonces no hay razón para cambiar.
Si descubre que es necesario optimizar partes de su código, puede reescribir solo esos bits en un lenguaje de nivel inferior y llamarlos desde su programa Matlab. Cambiar de idioma 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:
- Cree una solución de la manera más rápida y sencilla primero, lo que en su caso significa usar el idioma que mejor conozca.
- Ejecútelo con un conjunto de datos limitado utilizando un generador de perfiles y descubra dónde están los cuellos de botella.
- Corrija 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) reescriba ese bit de código en algo que se ejecute más rápido para ese problema en particular.
- Vuelva a 2. hasta que la ecuación de tiempo de ejecución / tiempo de desarrollo alcance cualquier umbral con el que se sienta cómodo (o, si es un estudiante graduado, hasta que su supervisor le grite que DEJE DE COMUNICARSE CON LA COSA DE LA SANGRE Y SOLO EJECUTELO) ).
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.
Matlab sobresale en:
- Matemáticas de alto nivel (solo calcule A * B, no tiene que llamar a A.multiply (B) o alguna sintaxis de tipo C ++ / Java)
- análisis de los datos
- Visualización de datos
- interactuando con Java
y hay suficientes bibliotecas / herramientas para hacer casi cualquier otra cosa de manera fácil (pero no necesariamente optimizada) para que pueda seguir trabajando en MATLAB una vez que comience.
No me gustaría usar algún paquete de software que sea bueno para, por ejemplo, matematicas matriciales, pero luego, cuando voy a hacer otra cosa, es horrible y me enfrento a la opción de aceptar ese negocio o abandonar mi trabajo y usar un software diferente.
Si está involucrado principalmente en algoritmos de creación de prototipos que involucran estructuras de datos simples, matlab es una excelente opción. El flujo de trabajo de muchos académicos que trabajan en campos computacionales es: desarrolle un nuevo algoritmo, verifique que funcione en matlab, luego escriba su trabajo y listo. Si esto es todo lo que deseas hacer, quédate con lo que sabes (matlab).
Si quiere hacer más que eso ... Bueno, 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 una característica similar a matlab, además de ser un lenguaje de programación completo y gratuito con una comunidad en línea vibrante. 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 algunas peculiaridades, pero eso es todo. Cambié de matlab a Python recientemente, y no pienso volver. Matlab parecía hacerme escribir el código de la peor manera posible. Mi código de Python es mucho más limpio, más modular y más fácil de leer. Además, el sistema de documentación Sphinx es excelente.
En resumen, considere python si:
- Vas a necesitar mantener una base de código grande
- Quieres que tu proyecto sea de código abierto y que otros contribuyan.
- Desea que su código esté disponible para personas sin una licencia matlab
- Desea escribir sus propias estructuras de datos personalizadas que no sean matrices (árboles, gráficos, ...)
- Debe implementar un código no numérico (buscar directorios locales, descargar desde urls, buscar archivos locales usando expresiones regulares, procesamiento de texto)
- Quieres generar documentación impresionante de forma fácil y efectiva.
- No quieres gastar dinero en efectivo en una licencia matlab
Aquí hay un enlace para Python sobre Matlab para investigación científica: http://www.stat.washington.edu/~hoytak/blog/whypython.html
Aquí hay un enlace indulgente que muestra el increíble potencial de Python Sphinx para generar automáticamente una 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 preparado para convertirse en EL estándar de la computación científica, por lo que definitivamente vale la pena aprender.
Sin duda, verá que Matlab es rápido en algunos puntos, pero cuando necesite cosas especializadas como la administración manual de memoria para trabajar con un vector que exceda lo que Matlab quiere darle, tendrá que saltar a través de algunos aros.
Estoy seguro de que puedes hacer todo rápido y fácilmente en Matlab, pero he llegado a verlo 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 cuesta reconocer las dimensiones.
Yo diría que se apegue a lo que sabe y que cambie cuando esté convencido de que Matlab no puede hacerlo. Aprender otro idioma es difícil, especialmente cuando se desea un código rápido y cálculos numéricos.
En una nota al margen, prefiero C ++, junto con algunas bibliotecas impresionantes (GSL, Eigen, etc.). Lo curioso es que todavía hago mis parcelas en Matlab, porque llegué a conocer muy bien esa parte de Matlab :)
También consideraría el software Mathematica, que es excelente para algunas de las necesidades que tienen los matemáticos.
Trabajo con un equipo de geofísicos de investigación profesional, aunque también soy un ingeniero de software numérico. Creo que si su trabajo es matemático numérico, entonces Matlab es muy adecuado, especialmente porque ya tiene experiencia en su uso.
Podría escribir programas más rápidos si seleccionó C o Fortran, aunque quizás no tanto como lo esperaría ya que Matlab usa, para muchas de sus rutinas numéricas, las mismas bibliotecas BLAS (etc.) que usaría si escribiera en C o Fortran. Pero a partir de mi experiencia laboral, mis colegas consideran que la capacidad de escribir programas más rápidamente es mucho más importante que escribir programas más rápidos. Generan muchas ideas que, después de reflexionar, luego rechazan. La velocidad adicional de desarrollo que Matlab proporciona por encima de C y Fortran significa que pasan por todo el ciclo (que generalmente incluye la visualización de resultados) mucho más rápido y lo hacen con más frecuencia, por lo que hacen más ciencia por una medida cruda.
(Aparte de eso: uno de los trabajos que recibo es convertir parte del código de Matlab que no se rechaza en los programas de Fortran para su ejecución en los grandes grupos de la empresa. Pero eso es lo que sucede con algunos de nuestros códigos cuando la investigación inicial está completa y Queremos desplegarlos para producción.)
También señalaría que Matlab tiene buenas capacidades de computación paralela (si puede costearlas) a través de Parallel Compute Toolbox, lo cual probablemente será de interés a medida que sus problemas se hagan más grandes y se dé cuenta de que está haciendo un uso insuficiente de algunos de sus núcleos. Incluso tiene integración con GPU computing en la última versión.
En pocas palabras, sugeriría que seguir con Matlab le permitirá centrarse en su investigación matemática y no desviar su atención hacia la lucha con un nuevo conjunto de herramientas. Especialmente porque no sugiere que Matlab sea inadecuado para sus necesidades esperadas.