La Biblioteca Científica GNU (o GSL ) es una biblioteca de software para cálculos numéricos en matemáticas y ciencias aplicadas . El GSL está escrito en C ; Hay contenedores disponibles para otros lenguajes de programación. El GSL es parte del Proyecto GNU [2] y se distribuye bajo la Licencia Pública General GNU .
El proyecto GSL fue iniciado en 1996 por los físicos Mark Galassi y James Theiler del Laboratorio Nacional de Los Álamos . [3] Su objetivo era escribir un reemplazo moderno para las bibliotecas Fortran ampliamente utilizadas pero algo obsoletas , como Netlib . [4] Llevaron a cabo el diseño general y escribieron los primeros módulos; Con eso listo, reclutaron a otros científicos para que contribuyeran.
Brian Gough y Gerard Jungman llevaron a cabo "el desarrollo general de la biblioteca y el diseño e implementación de los módulos principales". [3] Otros contribuyentes importantes fueron Jim Davies , Reid Priedhorsky, M. Booth y F. Rossi. [3]
La versión 1.0 se lanzó en 2001. En los años siguientes, la biblioteca se expandió lentamente; Como indica la documentación, los mantenedores estaban más interesados en la estabilidad que en la funcionalidad adicional. La versión principal 1 finalizó con la versión 1.16 de julio de 2013; esta fue la única actividad pública en los tres años 2012-2014.
El desarrollo vigoroso se reanudó con la publicación de la versión 2.0 en octubre de 2015. La última versión 2.7 se lanzó en junio de 2021.
El siguiente programa de ejemplo calcula el valor de la función de Bessel de primer tipo y orden cero para 5: [5]
#incluir <stdio.h> #incluir <gsl/gsl_sf_bessel.h> int principal ( vacío ) { doble x = 5,0 ; doble y = gsl_sf_bessel_J0 ( x ); printf ( "J0(%g) = %.18e \n " , x , y ); devolver 0 ; }
El programa de ejemplo debe estar vinculado a la biblioteca GSL tras la compilación:
$ gcc $( gsl-config --cflags ) ejemplo.c $( gsl-config --libs )
El resultado se muestra a continuación y debe ser correcto con una precisión de doble precisión :
J0(5) = -1,775967713143382920e-01
La biblioteca de software proporciona instalaciones para:
Dado que GSL está escrito en C, es sencillo proporcionar contenedores para otros lenguajes de programación. Actualmente existen envoltorios de este tipo para
El GSL se puede usar en clases de C++ , pero no usando punteros a funciones miembro, porque el tipo de puntero a función miembro es diferente del puntero a función . [23] En su lugar, se deben utilizar punteros a funciones estáticas. Otra solución común es utilizar un funtor .
Hay disponibles contenedores C++ para GSL. [7] [8] [9] [10] No todos reciben mantenimiento regular. Ofrecen acceso a clases matriciales y vectoriales sin tener que utilizar la interfaz de GSL para malloc y funciones gratuitas . Algunos también ofrecen soporte para crear espacios de trabajo que se comportan como clases de puntero inteligente . Finalmente, existe soporte (limitado, a partir de abril de 2020) para permitir al usuario crear clases para representar una función parametrizada como un funtor .
Si bien no son estrictamente contenedores, existen algunas clases de C++ [24] [25] que permiten a los usuarios de C++ utilizar la Biblioteca científica Gnu con funciones contenedoras.