Autor Tema: Lenguaje de programación adecuado.

0 Usuarios y 1 Visitante están viendo este tema.

07 Mayo, 2009, 04:27 am
Leído 7157 veces

mathtruco

  • Moderador Global
  • Mensajes: 5,089
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Hola,

 ¿en general, qué lenguaje de programación ocupais para hacer vuestras rutinas matemáticas?

Entiendo que fortran se ocupa bastante en el ámbito matemático/fisico, pero también entiendo que es antiguo, y he escuchado comentarios de informáticos aceca de que es anticuado.

C parece que es el lenguaje que no pasa de moda junto con matlab.

Pero han nacido muchos lenguajes nuevos (además de los orientados a objetos) que me hacen pensar que pueden haber aparecido lenguajes con otras propiedades que quizás son apropiadas para las matemáticas y que quizás se están comenzando a usar en alguna parte del globo.

Obviamente, cualquier lenguaje de programación permite definir rutinas.
Pero aprovecho el hecho de compartir con gente ligada a las matemáticas de muchas partes del mundo para conocer que se ocupa, y saber si hay nuevos lenguajes que se estén usando en el mundo científico/matemático.

07 Mayo, 2009, 04:45 am
Respuesta #1

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,337
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
Hoy en día lo que se usa son paquetes avanzadas y especializados para cada tipo de trabajo.
Por ejemplo, para ciertas cuestiones de modelos estadisticos se usa el R o similares.
El programa Mathematica tiene un lenguaje de programación incorporado, que está orientado a ''reglas'', lo cual da un notable grado de abstracción. Además el mathematica trabajo con calculo simbolico y precision ilimitada.
El matlab está limitado a la precisión decimal de la computadora. No sé si hay algún modo de saltarse esa restricción.
Además el matlab puede incorporar calculo simbolico u otras capacidades sólo a través de paquetes, porque la filosofía central del lenguaje es el trabajo con datos matriciales (MATrix LABoratory).
Según dicen las rutinas de matlab están muy optimizadas, lo que lo haría preferible al hecho de programar uno mismo los algoritmos en algún lenguaje.
El mathematica maneja tanta abstracción que me hace pensar que no es adecuado para la rapidez de cálculos, pero el matlab se vuelve inestable e impreciso cuando uno necesita cálculos que involucran matemáticas ''arriesgadas'' (trabajar con funciones que tienen singularidades, o incluso matrices singulares, son cosas que ya traen problemas).

Según entiendo, lo más rápido y eficiente es el C++, y el compilador incluso está más optimizado que el mismo C.
Así que conviene usar C++ antes que C.
El fortran es obsoleto. La gracia de usar un lenguaje como ese estaría por ejemplo si redundara en beneficios en la rapidez y precisión de los cálculos. Pero ignoro si esto es así.
Además el C++ es más que suficiente para hacer rutinas optimizadas.

Si hay que elegir entre C++ y Matlab, no estoy seguro qué elegir. Tengo una mala impresión de matlab, pero sólo porque es un programa de alto nivel, que trabaja con scripts. En cambio el C++ tiene un compilador incorporado, y eso hace que los programas anden más rápido. Sin embargo, una vez que el matlab se ha lanzado a hacer una serie complicada de calculos, seguro que es más completo y eficiente que lo que uno pueda hacer en C++, y hasta más rápido.

Lo que no conviene hacer en matlab es programación general...

Yo estoy aprendiendo java. Lo bueno de java es que es multiplataforma. Pero tango la sensación de que esa virtud puede redundar en una gran lentitud de proceso. Aunque a lo mejor el compilador en tiempo real de java se va mejorando con los años, aújn así sigo desconfiando de su ''rapidez''.

Pero pienso que lo ideal sería programar en java, debido a que la programación es más directa, uno se dirige al problema que tiene que resolver como programador, y se desentiende de los miles de detallitos técnicos que tiene, por ejemplo, el C++.
El programador no tiene que estar aprendiendo todos los caprichitos del lenguaje, porque eso es programar en bajo nivel, a fin de cuentas.
Cuando uno puede orientarse directo al problema, cuando uno piensa un algoritmo y puede traducirlo directo al lenguaje, eso es programar. Según lo que he visto, Java se parece más a este ideal. Pero el hecho de ocultar todo el trabajo interno de la máquina seguro hace más lento el proceso.

Si alguno quiere sufrir, traumarse y terminar volviendose psicópata o terrorista, le recomiendo aprender Cobol.
Es el lenguaje más estúpido, feo e inútil de toda la historia humana. Es una aberración que hay que quemar en el infierno junto con el imbécil que lo creó.

Para trabajar con latex, les recomiendo un programita de mi propia autoría, que reconfigura el teclado para generar toda la lista de comandos tex.  :P


07 Mayo, 2009, 05:42 am
Respuesta #2

Jabato

  • Visitante
Yo creo más bien que todo depende de que es lo que quieras hacer, para trabajos sencillos un C o incluso un Basic (cualquier edicón del Basic Clásico) debería ser suficiente, si deseas una programación más avanzada mi consejo es que uses Visual Basic directamente, es lo más completo, aunque es complicado de manejar. Los lenguajes de macros del Excel dan también mucho juego y son relativamente sencillos.

Personalmente te diré que suelo usar el Basic, aunque mis trabajos en programación no son precisamente tecnología punta, pero he llegado a realizar algunas aplicaciones para trabajar con fractales de las que verdaderamente me siento orgulloso, ya que los fractales no es precisamente un campo fácil de trabajar. Tiene un problema y es que no trabaja con complejos, aunque puede hacerse con programación, pero hasta la fecha no he sentido la necesidad de usar otros lenguajes, y lo he usado bastante a menudo.

Creo que todo depende de que es lo que te propongas.

Saludos, Jabato. ;D

07 Mayo, 2009, 09:06 am
Respuesta #3

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 48,994
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Citar
Yo creo más bien que todo depende de que es lo que quieras hacer, para trabajos sencillos un C o incluso un Basic (cualquier edicón del Basic Clásico) debería ser suficiente, si deseas una programación más avanzada mi consejo es que uses Visual Basic directamente, es lo más completo, aunque es complicado de manejar.

¡Dios Santo Jabato! no me digas que el Visual Basic es más avanzado que el C...

En teoría el C++ debiera de ser de lo mejorcito, mejor que el fortran que en su día era el lenguaje orientado a las matemáticas; sin embargo, en la práctica el fortran es todavía usado para programar métodos numéricos por encima del C. En mi departamento se hacen programas en fortran que resuelven problemas "reales" de inginería a nivel profesional.

Saludos.

07 Mayo, 2009, 11:03 am
Respuesta #4

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,337
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)

07 Mayo, 2009, 02:50 pm
Respuesta #5

Jabato

  • Visitante
Ja, Ja, Ja. Bueno, lo que vosotros digais, no me preocupa demasiado hacer concesiones en este terreno, yo solo pretendía aportar mi granito de arena, pero si me va a costar una lapidación en toda regla pues retiro lo dicho, no entiendo mucho de informática.

Saludos, Jabato. ::)

07 Mayo, 2009, 06:02 pm
Respuesta #6

topo23

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 937
  • Karma: +0/-0
Una gran ventaja de fortran, en el ambito cientifico, es que lleva siendo usado mucho tiempo, y existe una gran cantidad de librerias especializadas como BLAS, y hay una gran inversion de dinero de organismos como DOE que financian esta clase de librerias.

En general las simulaciones en supercomputadoras suelen utilizar una mezcla de c y fortran, fortran para la parte matematica y c para el resto.

--

Una ventaja de Visual Basic para .net (idem con C#) por sobre C/C++ es que tiene un optimizador dinamico, es decir si tienes un algoritmo paralelizable y tienes una computadora con 8 cores entonces aprovecha automaticamente los procesadores extra. Esto tambien se puede hacer en C/C++ pero hay que programarlo a "mano".

VB6 es un lenguaje bastante capaz, aunque tiene muchas limitaciones, que las versiones mas modernas VB.NET han mejorado bastante. Pero probablemente nadie lo use para hacer calculos matematicos.

--

Yo prefiero Python para hacer calculos matematicos, tiene enteros de precision arbitraria, funciona como una calculadora super avanzada, tiene algunas librerias externas que se pueden usar como un CAS (SciPy http://www.scipy.org/, sympy http://code.google.com/p/sympy/). Su sintaxis funcional permite trabajar comodamente con matrices, listas, etc.

Tambien uso maxima/axiom como son CAS que admiten programacion usando lisp. Y dejo C++ cuando tengo que hacer algun calculo superintensivo como plottear un fractal de 25M pixels.
.

08 Mayo, 2009, 12:09 am
Respuesta #7

mathtruco

  • Moderador Global
  • Mensajes: 5,089
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Gracias por compartir su sapiencia..


argentinator:
 no sabía que Mathematica era tan poderoso. Yo acostumbro a usar maple para cálculo simbólico. Voy a probarlo en cuanto tenga oportunidad para hacerme de una opinión.

Java: Tengo las ganas de aprenderlo junto con Python. Parece que es lo que se lleva en el mundo informático hoy por hoy (aunque no sé si eso rebote en que sea un buen lenguaje para hacer ciencia).

Cobol: jaja..  por supuesto que no es opción.




Para trabajar con latex, les recomiendo un programita de mi propia autoría, que reconfigura el teclado para generar toda la lista de comandos tex.  :P

 ¿cómo haces eso?


Jabato: gracias :P    Para eso hice esta pregunta, para que aprendamos de la experiencia de todos.



topo23: ¿porqué usas Python?. Además del manejo de matrices, ¿Qué ventajas tiene sobre c y fortran por ejemplo?

08 Mayo, 2009, 03:05 am
Respuesta #8

topo23

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 937
  • Karma: +0/-0
Al ser interpretado la ventaja sobre C++/Fortran es que no necesita un ciclo de compilacion/depuracion para obtener resultados, lo que permite ademas obtener resultados sin tener conocimientos avanzados de computacion (compilar/depurar un programa).

Posee una extensa coleccion de librerias para muchas ramas cientificas, por ejemplo hay una libreria llamada biopython que se especializa en biologia y secuenciacion de genes.

No posee tanta performance como C++/Fortran, pero la posibilidad de usar librerias externas optimizadas como numpy permiten obtener una performance aceptable, sumando esto a la rapidez de desarrollo lo convierten en un lenguaje bastante producto.

Pero si lo que necesitas es mucha performance de calculo entonces tienes que usar C++/Fortran.

Existe una version de python que usa el compilador de java, se llama jython y es exactamente igual que python original solo que usa el interprete java, y ademas permite usar cualquier libreria java. Similarmente existe una version para .net que se llama ironpython.
.

08 Mayo, 2009, 03:09 am
Respuesta #9

argentinator

  • Consultar la FIRMAPEDIA
  • Administrador
  • Mensajes: 7,337
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Vean mis posts activos en mi página personal
    • Mis posts activos (click aquí)
Me han recomendado python como herramienta para resolver problemas rápidamente, sin tanto tiempo de programación, pero a la hora de ejecutarse demora.
Está bueno que Python trabaje con enteros de precisión arbitraria, es justo lo que ando buscando.
Pero sospecho que al usar ese tipo de lenguaje de tan alto nivel la cosa puede volverse lenta a la  hora de hacer cálculos intensivos.
Habría que buscar la manera de conjugar varios lenguajes para resolver distintas partes de un problema, y acomodarse a las necesidades de cada problema.

Gracias por compartir su sapiencia..


Para trabajar con latex, les recomiendo un programita de mi propia autoría, que reconfigura el teclado para generar toda la lista de comandos tex.  :P

 ¿cómo haces eso?


Hay un ''lenguaje'' de programación que en realidad es lenguaje de script, que tiene el propósito principal de reconfigurar el teclado, el ratón y el joystick a voluntad del usuario.
Se llama AutoHotkey, y se puede bajar gratuitamente de :

http://www.autohotkey.com/download/

Ahora bien, lo que yo hice fue un script en ese lenguaje, configurando el teclado para el uso con TeX o LaTeX.
El teclado funciona muy bien, y por lo general una persona que usa mi teclado no se da cuenta de que hay un script instalado, porque me tomé el trabajo de diseñarlo con cuidado, de que no interfiera con la mayoría de las operaciones rutinarias normales en la PC.
Las combinaciones de teclas poco usadas o sin función, como Win+F2, o cosas así, las convertí en comandos LaTeX.
El sistema es muy intuitivo, y estoy orgulloso de mi creación.
Lo único en contra que tiene es que uno tiene que pegar etiquetas en las teclas para inventarse un teclado LATEX.
Yo lo hice, y tiene un sistema de colores muy sencillo, con el cual no hay que andar memorizando en qué tecla estaba cada comando.
Las letras griegas por ejemplo, siguen el patrón de los teclados griegos, así que aparecen de manera casi natural.
Les dejo adjunto un ZIP con el script ya ejecutable, y además una imagen escaneada de mi teclado real. No sé si será lo bastante autoexplicativo, en todo caso tendré que hacer un manualcito.

(Creo que ya posteé este script en algún lado, pero no recuerdo donde)