Software de Matemáticas: ¿Cuáles son las ventajas y desventajas de Mathematica?

Andrew tiene razón en que Mathematica / Maple son más adecuados para el cálculo simbólico, mientras que Matlab está específicamente diseñado para el cálculo numérico. Sin embargo, ambas clases de software le permitirán realizar cálculos numéricos o simbólicos, con diferentes grados de facilidad.

Una cosa que es muy distintiva entre Mathematica y Matlab es su flujo de trabajo. En Mathematica, la interacción central es a través del “cuaderno”: los comandos se escriben en él y la salida se muestra en línea con sus comandos.

En Matlab, la interacción central es a través de un script y una consola. De esta manera, Matlab se parece más a un lenguaje de script como Python o Ruby. Los comandos se pueden escribir y ejecutar en la consola, o agruparse en un script que se puede ejecutar de forma repetida y reproducible.

Una frustración que siempre tuve con Mathematica es que la salida de mis comandos se entremezcla con mis comandos, abarrotando todo. Mientras tanto, en Matlab, puedo comenzar a codificar y ejecutar el mismo script repetidamente y solo ver la salida en el área de la consola.

Para resumirlo:

  • Si está haciendo muchos cálculos numéricos sobre datos reales que desea ejecutar repetidamente, la interfaz similar a la programación para Matlab es probablemente su amigo. Sin embargo, hace que el cálculo simbólico sea difícil ya que la salida es principalmente texto.
  • Si está haciendo un cálculo mayormente simbólico, entonces el formato del cuaderno (donde los resultados de un cálculo simbólico se muestran en línea) probablemente tenga más sentido. Mathematica también es muy bueno para mostrar LaTeX = como salida.

Para Mathematica, estoy de acuerdo con los pros y los contras enumerados por Yura Koroliov. A ellos agregaría lo siguiente a continuación. En resumen, la flexibilidad de M es tanto una ventaja como una desventaja, totalmente dependientes del tamaño y la complejidad del programa que se está escribiendo. Para programas pequeños, Mathematica es hermoso, sorprendente, realmente divertido . Para programas grandes, es francamente un infierno.

Pros, en pequeños programas

  • El idioma está configurado para que el programa sea la salida de datos, muy LISPy. Eso significa que cada gráfico es en sí mismo una expresión M, y generalmente depurar y ajustar las cosas es fácil, ya que siempre puede obtener el “InputForm” para todo.
  • Biblioteca de gráficos simple basada en gráficos de escena que se siente como trabajar con HTML DOM o Flash
  • Las bibliotecas incluidas en la oferta base son muy sólidas en los modelos de visualización y escritura simples, pero no hay muchos modelos de nivel superior ya integrados (además del álgebra lineal y algunas estadísticas básicas)
  • En este nivel, las cosas son rápidas y responden, incluso las funciones interactivas “Dinámicas […]” funcionan como magia

Neutral, tal vez en 500 líneas comenzará a ver algunas compensaciones

  • El lenguaje M tiene algunos liners geniales (el motor de patrones es increíble), pero la falta de formalismos básicos como tuplas con nombre puede conducir a un código muy ilegible a largo plazo.

Contras, tal vez más de 1000 programas de línea que pueda encontrar

  • Los mensajes de error no incluyen un número de línea de origen para el código relevante. Obtendrá errores pero no tiene idea de dónde o por qué.
  • Más fundamentalmente, y por qué este problema no se puede solucionar , es que M no tiene el principio de falla rápida. El intérprete (el motor de patrones) no discrimina entre expresiones simbólicas (no evaluadas) y evaluadas. Tanto If [SomeNonBooleanJunk, X, Y] como If [True, X, Y] son ​​válidos. SomeNonBooleanJunk puede ser tan simple como un error tipográfico, una variable mal escrita o un nombre de función. ¿Por que importa? Imagine que tiene una función “Reescribir” que asigna esa instrucción If (donde la prueba es alguna función de la entrada) en una lista enorme. Una versión (la segunda) genera el esperado {X, Y, Y, X, …}. La otra versión (la primera) genera {If [SomeNonBooleanJunk, X, Y], If [SomeNonBooleanJunk, X, Y], If [SomeNonBooleanJunk, X, Y], …}, que es una lista de más basura. Esa lista de basura luego es operada por algún otro código, ¿y adivina qué? Sale más basura. Esa basura se propaga hasta la finalización del programa, donde se escupe como un objeto ininterpretable (y puede bloquear la interfaz de usuario con tanta basura), o el núcleo M gira hasta el infinito (y finalmente se queda sin memoria), porque todos los invariantes de su programa están rotos y no tiene idea de qué expresiones se están evaluando. Resultado final: debido a un error tipográfico simple, ha bloqueado su kernel y se sentó alrededor de 15 minutos mientras su sistema operativo funcionaba como loco en el proceso.
  • Nuevamente, debido al lenguaje M donde el programa es la salida de los datos, no existe un mecanismo de deshacer computacionalmente factible . Cualquier programa puede modificar cualquier parte de la computadora portátil: la entrada, la salida, los datos, etc. Por lo tanto, la única forma de permitir deshacer real sin afectar el rendimiento del intérprete es tomar una instantánea del estado completo del núcleo en cada ejecución, que existe Actualmente (a partir de 8) no hay opción para hacer. Por lo tanto, puede modificar algo accidentalmente, presionar accidentalmente ejecutar (MAYÚS + ENTRAR) y no poder deshacerlo .
  • El uso de la memoria y el rendimiento del intérprete es mucho peor que lo que sería un programa C / Java comparable. Las visualizaciones del gráfico de escena también sufren frente a un enfoque de modo inmediato. Mi impresión es que también está detrás de R.

Matlab
Fuerte:

  • gran álgebra lineal y algoritmos numéricos
  • lenguaje de script fácil de aprender
  • adecuado para simulación rápida de GUI y creación de prototipos.
  • posiblemente a las funciones de integración C
  • muchas extensiones gratuitas para cualquier necesidad (química / arquitectura / flotación, etc.)

Débiles:

  • intérprete lento
  • falta de convenciones de nombres de bibliotecas
  • falta de características orientadas a objetos
  • en mi opinión, utilizo muchos recuerdos

Mathematica:
Fuerte:

  • Lenguaje muy poderoso
  • Las convenciones de nombres son geniales
  • Muchos paradigmas OOP / List / Pattern mathing / programación lógica
  • capacidad del modo de compilación de algún código
  • computación simbólica muy fuerte
  • Wolfram alpha es una muy buena herramienta para sumergirse en el conocimiento mundial
  • Se puede utilizar para la presentación porque la GUI se parece al Bloc de notas.
  • Muy buena biblioteca de visualización

Débiles:

  • costo de extensiones
  • larga curva de aprendizaje
  • intérprete lento
  • es difícil escribir código modular
  • OOP es posible pero muy inutilizable

El arce es algo entre Matlab y Mathematica, ya que sé que el arce se usa como núcleo simbólico para Matlab y Matcad.

PD: los usé cuando era estudiante. Ahora prefiero usar la biblioteca C ++ / java porque te dan control total sin lentitud del modo de interpretación.

More Interesting

¿Se puede definir un sistema axiomático en matemáticas, donde Pi no es aproximadamente 3.14?

¿Qué son los números de teléfono virtuales (DDI)?

¿Cuáles son algunos consejos importantes que facilitan la comprensión de las funciones para el grado diez?

Sea [math] G [/ math] un gráfico conectado y [math] x, y [/ math] vértices de [math] G [/ math]. Deje [math] P [/ math] ser [math] xy [/ math] -geodesic. Luego, para todos los vértices [matemática] u, v [/ matemática] de [matemática] P [/ matemática], el subpata de [matemática] P [/ matemática] de [matemática] u [/ matemática] a [matemática] v [ / math] es [math] uv [/ math] -geodesic. ¿Puedes probarlo?

Si [math] a, b, c, d [/ math] son ​​números reales positivos tales que [math] a + b + c + d = 1, [/ math] ¿cómo puedo mostrar que [math] \ frac {a ^ 3} {b + c} + \ frac {b ^ 3} {c + d} + \ frac {c ^ 3} {d + a} + \ frac {d ^ 3} {a + b} \ ge \ frac {1} {8}? [/ matemáticas]

¿Por qué la notación matemática es tan terriblemente ambigua e inconsistente?

¿Qué es lo mejor que la gente sabe en matemáticas?

¿Cuál será el resto de [matemáticas] 4453 ^ {4435211!} [/ Matemáticas] cuando se divide por [matemáticas] 15433 [/ matemáticas]?

¿Cómo se puede probar que [matemáticas] \ lim_ {x \ rightarrow \ infty} \ sqrt {x ^ 2-x + 1} - \ left \ lfloor \ sqrt {x ^ 2-x + 1} \ right \ rfloor = 1 / 2 [/ matemáticas]?

Para un matemático, ¿hay alguna diferencia entre 4 + 5 y 5 + 4?

¿Qué es una falacia matemática de la que probablemente nunca haya oído hablar?

¿Qué significa el símbolo matemático | ->?

¿Cómo es el eje x anudado una retracción de R ^ 3?

¿Cuál es una explicación intuitiva del teorema de Mercer?

Cómo dibujar una variedad Calabi-Yau