GNU Scientific Library

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[1] e é distribuída sob a GNU General Public License.
Histórico do projeto
[editar | editar código fonte]O projeto GSL foi iniciado em 1996 pelos físicos Mark Galassi e James Theiler do Los Alamos National Laboratory.[2] Eles pretendiam escrever um substituto moderno para bibliotecas Fortran amplamente usadas, mas um tanto desatualizadas, como Netlib.[3] 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.[2] Outros contribuidores importantes foram Jim Davies, Reid Priedhorsky, M. Booth e F. Rossi.[2]
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
[editar | editar código fonte]O programa de exemplo a seguir calcula o valor da função de Bessel para 5:[4]
#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>
int main(void)
{
  double x = 5.0;
  double y = gsl_sf_bessel_J0(x);
  printf("J0(%g) = %.18e\n", x, y);
  return 0;
}
O programa de exemplo deve ser vinculado à biblioteca GSL durante a compilação :
gcc $(gsl-config --cflags) example.c $(gsl-config --libs)
A saída é mostrada abaixo e deve estar correta para precisão de dupla precisão:
J0(5) = -1,775967713143382920e-01
Recursos
[editar | editar código fonte]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
[editar | editar código fonte]Como a GSL é escrita em C, é fácil fornecer wrappers para outras linguagens de programação. Esses wrappers existem atualmente para
- AMPL[5]
 - C++[6][7][8][9]
 - Fortran[10]
 - Haskell[11][12]
 - Java[13]
 - Júlia[14]
 - Lisp comum[15]
 - Ocaml[16]
 - Oitava
 - Linguagem de Dados Perl
 - Python[17]
 - R[18][19]
 - Rubi[20]
 - ferrugem[21]
 
Suporte a C++
[editar | editar código fonte]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.[22] 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.[6][7][8][9] 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++ [23][24] que permitem aos usuários de C++ usar a Gnu Scientific Library com recursos de wrapper.
Referências
[editar | editar código fonte]- ↑ «GNU - Free Software Directory»
 - ↑ a b c GSL homepage.
 - ↑ GSL design document.
 - ↑ Using the Library.
 - ↑ AMPL bindings for the GNU Scientific Library.
 - ↑ a b ccgsl: a C++ interface for the GNU Scientific Library;
 - ↑ a b GSL-- C++ wrappers for GSL Arquivado em 2015-01-29 no Wayback Machine;
 - ↑ a b GSLwrap: A C++ wrapper class for the GNU Scientific Library;
 - ↑ a b gslcpp: A Header-Only, Modern C++-Library Wrapping the GNU Scientific Library.
 - ↑ FGSL - A Fortran interface to the GNU Scientific Library.
 - ↑ The hmatrix-special package, an interface to GSL special functions.
 - ↑ The hmatrix-gsl package, a purely functional interface to selected numerical computations, internally implemented using GSL.
 - ↑ JavaCPP Presets for GSL.
 - ↑ Julia interface to GSL.
 - ↑ GSLL, GNU Scientific Library for Lisp.
 - ↑ gsl-ocaml: OCaml bindings to the GSL.
 - ↑ Python interface for GNU Scientific Library.
 - ↑ RcppGSL: 'Rcpp' Integration for 'GNU GSL' Vectors and Matrices.
 - ↑ gsl: wrapper for the Gnu Scientific Library.
 - ↑ rb-gsl: Ruby/GSL is a Ruby interface to the GNU Scientific Library, for numerical computing with Ruby.
 - ↑ rust-gsl: A Rust binding for the GSL library (the GNU Scientific Library).
 - ↑ Pointers to member functions.
 - ↑ o2scl Object-oriented Scientific Computing Library;
 - ↑ yat.
 
Ligações externas
[editar | editar código fonte]- Sítio oficial
 - GSL Design Document
 - The gsl package for R (programming language), an R wrapper for the special functions and quasi random number generators.
 - FLOSS FOR SCIENCE interview with Mark Galassi on the history of GSL.