• Publicidad

Perl o Fortran

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Perl o Fortran

Notapor echangel » 2011-04-29 09:31 @438

Hola amigos:

Me llamo Emilio y soy totalmente novato en el mundo de la programación, hasta ahora los únicos programas que he hecho han sido en Matlab. Éstos se han ejecutado bastante bien y no he tenido mayores problemas, pero lamentablemente el Matlab posee cierto limite de precisión la que para aumentarla debo desembolsar una buena cantidad de dinero, entonces me han sugerido que utilice Perl o Fortran, y justo aquí está mi duda.

Para alguien que no sabe casi nada de programación, solo pseudo código y nada más, ¿cuál de los dos programas o programadores o como se llamen es más sencillo de utilizar y aprender, Perl o Fortran?. Lo que busco con el programa a crear es una precisión numérica muy fina que sea cuádruple o superior, y además de rapidez en los cálculos los que están totalmente optimizados en Matlab.

Cualquiera comentario se agradecerá muchísimo,

Saludos
echangel
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-04-29 09:21 @431

Publicidad

Re: Perl o Fortran

Notapor explorer » 2011-04-29 11:48 @533

Bienvenido a los foros de Perl en español, echangel.

Perl, por defecto, no está preparado para gestionar una gran precisión o una gran cantidad de datos de forma rápida.

De todas maneras, en Perl se puede hacer de casi todo, así que para esas tareas tenemos la opción de usar PDL, biblioteca matemática que permite realizar programas con la sintaxis de Perl.

El problema de PDL es el mismo que el otras librerías matemáticas: hay que aprenderse su nomenclatura, su forma de trabajo, su espacio de nombres, etc. La curva de aprendizaje es muy fuerte, pero una vez superada, se ven los beneficios de unir Perl con esta biblioteca. En la web de PDL tienes algunos ejemplos de aplicación.

Otro tema más peliagudo es la precisión. Como cualquier otro sistema informático moderno, los cálculos se realizan usando el cálculo con punto flotante, y ya sabemos los problemas que eso acarrea.

En Perl existen módulos para realizar cálculos con números muy grandes o muy pequeños, con un gran número de decimales, decidiendo la precisión (redondeo a un cierto lugar antes o después de la coma) y exactitud (redondeo a un cierto número de dígitos). Por ejemplo, Math::BigFloat.

Aunque usan su propia biblioteca compilada en C, no deja de ser más lento que si usáramos un programa preparado para manejar precisiones arbitrarias de forma directa. Pero programar en Fortran o C es más lento (y proclive a errores) que programando en Perl.

Hay que sopesar las ventajas y desventajas de cada caso.

Por aquí hemos comentado, en alguna ocasión, sobre estos temas. También en Enteros grandes en C y Números mayores de 16 dígitos.

Aunque te puedo recomendar Fortran en primer lugar, hace muchos años que no programa en este lenguaje y no conozco las nuevas facilidades para conseguir lo que quieres. Y Perl suele ser un lenguaje más amplio, con lo que puede ser también más difícil de aprender que Fortran. Pero puedes hacer más cosas que con Fortran, y más rápidas.

También puedes aprender los dos, por supuesto :)

Sería interesante saber más detalles de lo que quieres hacer.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl o Fortran

Notapor echangel » 2011-04-30 17:24 @766

Hola:

Muchas gracias por vuestra respuesta. Te cuento más o menos lo que estoy haciendo.

Se trata de cálculos de raíces de sistemas ecuaciones no lineales acopladas que por lo general me generan sistemas matriciales de 12x12, 24x24, 2n*12x2n*12. De estos sistemas yo calculo numéricamente (a través de un código propio) sus soluciones, las que por la naturaleza del sistema son infinitas. Posteriormente las ploteo y me generan una serie de curvas las que se denominan relación de dispersión; luego estas curvas les hago un estudio particular que da información de los procesos que ocurren en este sistema, es un poquito complicado describir todo el resto.

Pero lo principal y más importante de este programa es alcanzar todas las soluciones necesarias para describir el sistema y es justo aquí donde Matlab se cae ya que para unas determinadas condiciones de cálculo me genera demasiado ruido numérico. Revisando el comportamiento de las ecuaciones me di cuenta que en realidad lo que está pasando es que la precisión de Matlab es la que me generaba el ruido numérico. He hecho de todo para mejorar el arribo a las soluciones pero no hay caso ,el problema sigue siendo el mismo: necesito una mayor precisión.

Todo el programa está hecho pero en Matlab, funciona bien para determinados valores y muy rápido, pero para determinado valores no hace un buen cálculo y me genera este ruido numérico, y consultando con varios profesores de este problema me han sugerido que definitivamente debo hacerlo en Fortran o Perl, yo nunca he tenido clases de programación. Aprendí un poco solo viendo los ejemplos de Matlab.

Espero sus concejos. Saludos E.
echangel
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-04-29 09:21 @431

Re: Perl o Fortran

Notapor explorer » 2011-04-30 18:15 @802

Puedes también seguir usando el propio Matlab...

Según Google, puedes usar el indefinite precision toolkit o el symbolic toolbox y entonces tienes todos los decimales a tu disposición.

O el MPTOOLBOX.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl o Fortran

Notapor echangel » 2011-05-01 08:51 @410

Ese es el problema: que ese toolbox cuesta unos 2000 €. No tengo esa extensión en la versión que poseo.
echangel
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2011-04-29 09:21 @431

Re: Perl o Fortran

Notapor explorer » 2011-05-01 10:24 @475

Según he leído por ahí, la precisión de PDL es de 16 dígitos significativos en números en punto flotante de doble precisión IEEE (8 bytes), en el rango 10**-308 al 10**308, mientras que la de Matlab varía (no es automática), en el rango 10**-300 al 10**300.

En ese mismo hilo se indica que Perl cuenta con otros módulos para el cálculo con números en punto flotante con mayor precisión:
  • Math::MPFR, interfaz para la biblioteca MPFR
  • Math::BigFloat, ya comentado antes, paquete matemático de punto flotante de tamaño arbitrario
  • Math::GMPf, interfaz para las funciones mfp de la biblioteca GMP
De todas las posibles soluciones, te aconsejo que hagas una prueba de cálculo con Math::BigFloat, para ver si puede solventar el arrastre de error entre las operaciones que quieres hacer.

Aquí tienes (en inglés) una explicación más detallada de lo que es Precisión y Exactitud en Math::BigFloat y Math::BigInt.

Aquí tienes una introducción (en inglés) muy buena a PDL, además de algunos comentarios más a la precisión y otros relativos a Math::GMPf.

Deberías visitar el wiki de PDL, sobre todo la página PDL for Matlab users. También en la página principal tienes una sección de recursos, con enlaces a libros, de los que el primero a leer es el de Xavier Calbet.

También puedes probar a mirar algunos de los módulos ya presentes en CPAN sobre la resolución de sistemas no lineales.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados