La Biblioteca Científica GNU (o GSL ) es una biblioteca de software para cálculos numéricos en matemáticas y ciencias aplicadas . La GSL está escrita en C ; existen contenedores disponibles para otros lenguajes de programación. La 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 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.
El "desarrollo general de la biblioteca y el diseño e implementación de los módulos principales" fue llevado a cabo por Brian Gough y Gerard Jungman. [3] Otros colaboradores importantes fueron Jim Davies , Reid Priedhorsky, M. Booth y F. Rossi. [3]
La versión 1.0 se publicó en 2001. En los años siguientes, la biblioteca se expandió lentamente; como indica la documentación, los encargados del mantenimiento estaban más interesados en la estabilidad que en la funcionalidad adicional. La versión principal 1 finalizó con el lanzamiento de 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, que incluía parches aportados por los usuarios. La última versión 2.8 se lanzó en mayo de 2024.
El siguiente programa de ejemplo calcula el valor de la función de Bessel de primer tipo y orden cero para 5: [5]
#include <stdio.h> #include <gsl/gsl_sf_bessel.h> int main ( void ) { 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 vincularse a la biblioteca GSL durante la compilación:
$ gcc $( gsl-config --cflags ) ejemplo.c $( gsl-config --libs )
La salida se muestra a continuación y debe ser correcta con una precisión doble :
J0(5) = -1,775967713143382920e-01
La biblioteca de software proporciona facilidades para:
Dado que GSL está escrito en C, es sencillo proporcionar contenedores para otros lenguajes de programación. Dichos contenedores existen actualmente para
El GSL se puede utilizar en clases de C++ , pero no utilizando punteros a funciones miembro, porque el tipo de puntero a función miembro es diferente del de puntero a función . [23] En su lugar, se deben utilizar punteros a funciones estáticas. Otra solución alternativa común es utilizar un functor .
Hay disponibles contenedores C++ para GSL. [7] [8] [9] [10] No todos ellos reciben mantenimiento regular. Ofrecen acceso a clases de matriz y vector sin tener que usar la interfaz de GSL para malloc y funciones libres . Algunos también ofrecen soporte para crear espacios de trabajo que se comporten 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 functor .
Si bien no son estrictamente envoltorios, hay algunas clases de C++ [24] [25] que permiten a los usuarios de C++ utilizar la biblioteca científica Gnu con funciones de envoltorio.