# Biblioteca Científica GNU

A Biblioteca Científica GNU (em inglês GNU Scientific Library ou GSL) é uma biblioteca de software para cálculos numéricos em matemática aplicada e ciências. A GSL é escrita em C ; wrappers estão disponíveis para outras linguagens de programação. A GSL faz parte do Projeto GNU e é distribuída sob a GNU General Public License.

## Histórico do projeto

O projeto GSL foi iniciado em 1996 pelos físicos Mark Galassi e James Theiler do Los Alamos National Laboratory. Eles pretendiam escrever um substituto moderno para bibliotecas Fortran amplamente usadas, mas um tanto desatualizadas, como Netlib. Eles realizaram o projeto geral e escreveram os primeiros módulos; com isso pronto recrutaram outros cientistas para contribuir.
O "desenvolvimento geral da biblioteca e o design e implementação dos principais módulos" foram realizados por Brian Gough e Gerard Jungman. Outros contribuidores importantes foram Jim Davies, Reid Priedhorsky, M. Booth e F. Rossi.
A versão 1.0 foi lançada em 2001. Nos anos seguintes, a biblioteca expandiu-se lentamente; como afirma a documentação, os mantenedores estavam mais interessados em estabilidade do que em funcionalidade adicional. A versão principal 1 terminou com o lançamento 1.16 de julho de 2013; esta foi a única atividade pública nos três anos de 2012–2014.
O desenvolvimento vigoroso foi retomado com a publicação da versão 2.0 em outubro de 2015. A última versão 2.7 foi lançada em junho de 2021.

## Exemplo

O programa de exemplo a seguir calcula o valor da função de Bessel para 5:
O programa de exemplo deve ser vinculado à biblioteca GSL durante a compilação :
A saída é mostrada abaixo e deve estar correta para precisão de dupla precisão:

## Recursos

A biblioteca de software fornece recursos para :
* Funções básica matemáticas
* Números complexos
* Politomias
* B-splines
* Funções especiais
* Vetores e matrizes
* Permutações
* Combinações
* Multiconjuntos
* Sorting
* BLAS
* Algebra linear
* Eigensystems
* Fast Fourier transforms
* Integração numérica (baseada em QUADPACK)
* Random number generation
* Quasi-random sequences
* Random number distributions
* Estatística
* Histogramas
* N-tuples
* Integração de Monte Carlo
* Simulated annealing
* Ordinary differential equations
* Interpolação
* Diferenciação numérica
* Chebyshev approximations
* Aceleração de Series
* Transformada discreta de Hankel
* Root finding in one and multiple dimensions
* Minimization in one and multiple dimensions
* Least-squares fitting
* Nonlinear least-squares fitting
* Physical constants
* IEEE floating-point arithmetic
* Discrete wavelet transform

### Vinculações de linguagem de programação

Como a GSL é escrita em C, é fácil fornecer wrappers para outras linguagens de programação. Esses wrappers existem atualmente para
* AMPL
* C++
* Fortran
* Haskell
* Java
* Júlia
* Lisp comum
* Ocaml
* Oitava
* Linguagem de Dados Perl
* Python
* R
* Rubi
* ferrugem

### Suporte a C++

A GSL pode ser usada em classes C++, mas não usando ponteiros para funções de membro, porque o tipo de ponteiro para função de membro é diferente de ponteiro para função. Em vez disso, ponteiros para funções estáticas devem ser usados. Outra solução comum é usar um functor.
Estão disponíveis wrappers C++ para GSL. Nem todos estes são mantidos regularmente. Eles oferecem acesso a classes de vetores e matrizes sem ter que usar a interface GSL para funções malloc e free. Alguns também oferecem suporte para a criação de áreas de trabalho que se comportam como classes de ponteiro inteligente. Por fim, há suporte (limitado, a partir de abril de 2020) para permitir que o usuário crie classes para representar uma função parametrizada como um functor.
Embora não sejam estritamente wrappers, existem algumas classes C++ que permitem aos usuários de C++ usar a Gnu Scientific Library com recursos de wrapper.