8 votos

Lenguajes de programación recomendado para el trabajo en matemáticas y entender la complejidad computacional

Soy un estudiante de matemáticas del estudiante y estoy logrando permanecer un semestre por delante de mis clases. Una manera en la que quiero usar mi tiempo libre a aprender un lenguaje de computadora(s) que me ayudará en mi matemáticos futuro como alguien que quiere trabajar en la matemática pura. También estoy interesado en los algoritmos y la teoría de la complejidad y de las clases. Yo no tengo de fondo en cualquier lenguaje de ahora

Pregunta: ¿Qué idioma o idiomas son usualmente se enseña a desarrollar una base de entendimiento para la programación, que también son utilizados por el trabajo de los matemáticos de hoy en día? Y el conjunto de idiomas están más orientados hacia la algorítmica y la teoría de la complejidad? Es allí cualquier intersección entre los dos?

Gracias de antemano chicos/chicas. Cualquier comentario,respuesta o de entrada se agradece!!

15voto

CodeMonkey1313 Puntos 4754

Estoy de acuerdo con @Pieter21 que python es su mejor apuesta ahora por la utilidad general como un estudiante de matemáticas, y más tarde en el trabajo avanzado en matemáticas puras.

Para una llamativa (bending) panorama de la computación, la recomiendo Abelson y Sussman Estructura e Interpretación de los Programas de Ordenador. Usted no es probable que el Esquema de uso (un dialecto de Lisp) para la programación de proyectos, pero el contenido filosófico del libro es esclarecedor.

No sé de ningún idioma que sería particularmente útil para pensar acerca de la teoría de la complejidad.

Creo que el aprendizaje de C sería un error - un montón de costo por adelantado antes de llegar a las partes que le interesan.

11voto

mvw Puntos 13437

Para una introducción a la programación me gustaría recomendar un "lenguaje de secuencia de comandos":

  • Los modernos lenguajes de secuencias de comandos (por ejemplo, Python, Ruby) tienden a ser no el más eficiente en el uso de hardware, pero son expresivos y grandes para el desarrollo de programas complejos. Ruby es más elegante de Python en mi humilde opinión, pero Python tiene un montón de grandes matemáticos las bibliotecas. Así Python sería una buena opción.

Luego están los lenguajes que permiten escribir rápido de programas, programas que utilizan la memoria de manera muy eficiente y puede hablar con la mayoría del hardware:

  • El propósito general idiomas que permiten utilizar el hardware de muy de manera eficiente generalmente falta en la abstracción y sólo han de datos simple estructuras. (C, FORTRAN)

  • C++ con las bibliotecas modernas es de hardware eficiente y avanzada de datos estructuras.

A veces fácil portabilidad a diferentes sistemas operativos y el hardware es importante:

  • Java tiene la ventaja de ser muy portátil, incluyendo su interfaz gráfica de usuario, pero no es expresivo, en comparación con los modernos lenguajes de script y no el lenguaje que utiliza el hardware de manera eficiente. Sin embargo, que podría haber cambiado por el compilador y la máquina virtual de optimizaciones. E. g. GeoGebra es un software de matemáticas que está implementado en Java, debido a estas ventajas. Java es, probablemente, la mayoría de los principales lenguaje de hoy. (E. g. ver este ranking).

Hay idiomas que se centran en las matemáticas:

  • Mathematica, Maple, Matlab o R, son algunos ejemplos. Cada uno tiene sus puntos fuertes.

  • Julia parece para ser un prometedor nuevo idioma, pero yo no tengo experiencia con ella.

A continuación, el ocasional de sorpresa:

  • JavaScript. Como idioma nativo del navegador web que se hizo más y más importante a lo largo de los años. Es un raro recomendación sobre las matemáticas ahora, pero podría seguir sorpresa.

Finalmente usted puede ser que desee ampliar su comprensión de la programación:

  • Los idiomas anteriormente, en general, sigue el paradigma de programación imperativo, como estructurada u orientada a objetos lenguajes. Sin embargo, existen enfoques alternativos a la programación, como

  • la programación declarativa, por ejemplo, Prolog o

  • programación funcional (por ejemplo, Lisp, Haskell, Erlang, OCaml, F#).

Destacan, por ciertos problemas y ampliar la comprensión de la programación. Sus ideas tienen conexiones a la lógica y a la teoría de la computación.

6voto

Dennis Bunskoek Puntos 201

Para tu pregunta específica, un lenguaje adecuado a los matemáticos y a la comprensión de la complejidad del cálculo, recomiendo un lenguaje de programación funcional, en particular Haskell o Esquema.

Haskell es un muy elegante pero también prácticos de programación funcional. Inspirado mi notación matemática, tiene una muy fuerte del tipo de sistema y una declaración de estilo, una reminiscencia de razonamiento matemático. En específico con respecto a su punto de intersección entre "un lenguaje de programación para los matemáticos" y "un lenguaje de programación para entender la complejidad computacional mejor", me gustaría que más recomendamos Haskell.

El esquema es un dialecto de Lisp, uno de los idiomas más antiguos en existencia hoy en día, que está inspirada en $\lambda$-cálculo. Muy minimalista, muy elegante, y yo casi se garantiza que la comprensión de que va a hacer un mejor programador y un mejor matemático. Si quieres ir a esta ruta me recomiendan seguir El Pequeño Mediapunta, absolutamente delicioso libro de Daniel P. Friedman y Matías Felleisen.

3voto

Dale Goodman Puntos 97

Dependiendo de lo que quieras hacer, yo recomendaría diferentes idiomas.

Para la comprensión de la complejidad computacional y algoritmos básicos, python o C.

Python es fácil para principiantes, y tienen mucho mejor legibilidad de C++ o Java. Es fácil escribir muy limpio algoritmos con la limpieza de la sintaxis. Es adecuado para su primer lenguaje de programación.

Por ejemplo, para el intercambio de dos números enteros:

En python:

x, y = y, x

En C/C++/Java

int t = x; x = y; y = t;

C es mucho mayor que el de python, sin embargo, C es un lenguaje simple, con sólo un par de palabras clave y no avanzados de programación orientada a objetos construcciones. También es adecuado para experimentar con los algoritmos sencillos.

C++ es un superconjunto de C, que principalmente añadido funcionalidades de ingeniería de software de propósito. Si quieres profundizar en el CS desde un punto de vista técnico, C++ o Java también es recomendado.

Para el aprendizaje de las matemáticas puras, Wolfram Language (o ampliamente conocido como Mathematica) es fuertemente recomendado.

MMA es desarrollado inicialmente como una herramienta de investigación para los Matemáticos, sin embargo, recientemente se ha introducido un montón de nuevas funcionalidades en la ingeniería en general y de la informática.

Factor de polinomios, ecuaciones diferenciales, la búsqueda de enorme autovalores, la simulación de los efectos cuánticos, demostrando simple teoremas, hacer gráficos interactivos ... usted no encontrará muchos software puede hacer todo a la vez. Es simbólico del lenguaje de programación, lo que significa que puede controlar exacto expresiones matemáticas en lugar de sólo una expresión numérica.

In[1]:= Integrate[ Sin[x^2], {x, 0, Infinity}]                                                                                                                          

             Pi
        Sqrt[--]
             2
Out[1]= --------
           2

Hacía falta mucho esfuerzo para código en C o python sin externas paquete.

MMA también cuenta con algunos sintaxis de programación funcional así que usted puede experimentar con diferentes paradigmas de programación.

Para la ingeniería orientada, python, matlab, R es aconsejada.

Mathematica es un poco corto en Ingeniería debido a su lenta ejecución y la única de doble precisión, soporte para matrices densas.

Sí, como he mencionado, python de nuevo, porque las personas han desarrollado un sinnúmero de herramientas numéricas relacionadas con el uso.

  • numpy: una matriz general de la utilidad, para los vectores, matrices, o los tensores de orden superior

  • scipy: La hermana de numpy, la más útil de las herramientas y utilidades para el álgebra lineal, el procesamiento de la señal, estadísticas, procesamiento de imágenes, y mucho más ...

  • matplotlib: Parcela científica gráficos

  • pandas, scikit-learn, sympy ... y más

MATLAB es desarrollado desde cero para la ingeniería propósito. (Se llama MAT-LAB, lo que significa que lidiar con matrices numéricas) tiene más herramientas especializadas para tareas muy específicas. Yo no soy una de matlab usuario, así que no puedo dar más información.

R es desarrollado para las estadísticas y los datos de la ciencia. Ganó considerable popularidad en los últimos años. Yo no soy un usuario R, así que no puedo dar más información.

2voto

piotr.d Puntos 335

Estoy de acuerdo con andrepd. Sugiero un lenguaje de programación funcional así.

Estándar ML es un lenguaje limpio y más hermosas con las matemáticas. Por ejemplo, aquí es cómo usted puede construir los números naturales con los axiomas de Peano

datatype n = zero | s of n;

(* Addition *)
infix ADD
fun a ADD zero  = a |
    a ADD (s(b))= s(a ADD b);

(* Multiplication *)
infix MUL
fun a MUL zero  = zero |
    a MUL (s(b))= a ADD (a MUL b); 

val one = s(zero);
val two = s(s(zero));

one ADD two; (* s(s(s(zero))) which is 3 *)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X