terça-feira, 1 de maio de 2012

Ciências maneira do GNU.

A Parte boa da ciência eé que sempre haverá algo novo para descobrir e estudar. Mas, isso significa que até para desenvolver as ferramentas de software que precisamos para fazer análise temos que nos desempenhar em pesquisa.
 Este artigo dá uma olhada na Biblioteca Científica GNU, ou GSL. Esta biblioteca é a biblioteca de rotina do Exército Suíço, que você encontrará útil em seu trabalho
Primeiro, você precisa obter uma cópia da GSL e instalá-lo no seu sistema. Porque é parte do Projeto GNU, que está hospedado em  http://www.gnu.org/s/gsl. Você sempre pode baixar e construir a partir do código fonte, mas todas as principais distribuições deve ter pacotes disponíveis. Por exemplo, em sistemas baseados em Debian, você precisa instalar o pacote libgsl0-dev para desenvolver o seu código e gsl-bin para executar esse código. GSL é para C e C + +, então você também precisa de um compilador. A maioria de vocês provavelmente já estão familiarizados com o GCC, porisso irei continuar.
O próximo passo é na verdade o último passo. Eu estou olhando para compilador para que eu possa focar todas as ferramentas disponíveis na GSL. Todos os arquivos de cabeçalho para GSL são armazenados em um subdiretório chamado gsl. Assim, por exemplo, caso você queria incluir o arquivo matemática no
cabeçalho , você usaria:

# Include <gsl/gsl_math.h>
Todas as funções são armazenadas em um arquivo de biblioteca single chamado libgsl.a ou libgsl.so. Você também precisa de uma biblioteca para lidar com álgebra linear básica. GSL fornece um (no libgslcblas.so arquivo), mas você pode usar o seu próprio. Além disso, você precisa vincular a biblioteca matemática. Assim, a compilação final e comando de ligação deve ter esta aparência: Garrick, uma linha abaixo.

gcc-o hello_world hello_world.c-lgsl-lgslcblas-lm
Há versões inline para algumas das funções de desempenho crítico em GSL. Para usá-los, você precisa incluir-DHAVE_INLINE com o comando de compilação. Para tentar ajudar com problemas de portabilidade, GSL oferece algumas funções que só existem em certas plataformas (e não outros). Como um exemplo, a biblioteca matemática BSD tem uma função chamada hypot. GSL oferece sua própria versão, chamada gsl_hypot, que você pode usar em plataformas não-BSD. Algumas funções têm tanto um algoritmo geral, bem como versões optimizadas para plataformas específicas. Dessa forma, se você estiver executando em um SPARC, por exemplo, você pode selecionar uma versão otimizada para SPARC se ele existir.
Uma das primeiras coisas que você provavelmente vai querer fazer é verificar se você está obtendo resultados corretos do seu código ou se houve erros. GSL tem um número de funções e estruturas de dados disponíveis no ficheiro de cabeçalho chamado gsl_errno.h. Funções retornam um valor zero se está tudo bem. Se houvesse algum problema na tentativa de completar a ação solicitada, um valor diferente de zero é retornado. Esta poderia ser uma condição
real de  erro , como um tipo de dados errado ou erro de memória, ou poderia ser uma condição como não sendo capaz de convergir para dentro da precisão requerida na chamada de função. É por isso que você sempre precisa verificar o valor de retorno para todas as chamadas de função GSL. Os valores reais retornados em uma condição de erro são códigos de erro, definidas no gsl_errno.h arquivo. Elas são definidas como macros que começam com GSL_. Exemplos incluem o seguinte:

    
GSL_EDOM - erro de domínio, utilizado por funções, quando um argumento não cair no domínio sobre o qual a função é definida.

    
GSL_ERANGE - erro de intervalo, ou um estouro ou estouro negativo.

    
GSL_ENOMEM - sem memória disponível.
A biblioteca vai usar apenas valores até 1024. Valores acima deste estão disponíveis para uso no seu próprio código. Há também versões de seqüência de códigos de erro disponíveis. Você pode traduzir o código de erro a seu valor de texto com a função gsl_errno ().
Agora que você sabe como compilar o seu programa e o que fazer com os erros, vamos começar a olhar para que tipo de trabalho que você pode fazer com GSL.  Funções
básicas de  matemáticas são definidas na gsl_math.h arquivo. O conjunto de constantes matemáticas a partir da biblioteca matemática BSD são fornecidos por esta parte da GSL. Todas as constantes começar com M_. Aqui estão algumas delas:

    
M_PI - pi.

    
M_SQRT2 - a raiz quadrada de 2.

    
M_EULER - constante de Euler.
Há também recursos para lidar com infinitos e não números. Três macros definir os valores próprios:

    
GSL_POSINF - infinito positivo.

    
GSL_NEGINF - infinito negativo.

    
GSL_NAN - não um número.
Há também funções para variáveis ​​de teste:

    
gsl_isnan - não é um número?

    
gsl_isinf - é infinito?

    
gsl_finite - é finito?
Existe uma macro para encontrar o sinal de um número. GSL_SIGN (x) retorna o sinal de x: 1 se for positivo e -1 se for negativo. Se você estiver interessado em ver se um número é par ou ímpar, dois macros são definidas: GSL_IS_ODD (x) e GSL_IS_EVEN (x). Elas retornam 1 se a condição for verdadeira e 0 se for falsa.
Uma série de funções elementares são parte da biblioteca matemática BSD. GSL fornece versões para plataformas que não possuem versões nativas, incluindo itens como:

    
gsl_hypot - calcular hipotenusa.

    
gsl_asinh, gsl_acosh, gsl_atanh - as funções hiperbólicas arco trigonométricas.
Se você estiver calculando a potência de um número, que você usaria gsl_pow_int (X, n), que lhe dá x ao poder do n. Existem versões específicas para poderes menos de 10. Então, se você quisesse encontrar o cubo de um número, você usaria gsl_pow_3. Estes são muito eficientes e altamente optimizada. Você pode até inline essas funções especializadas quando HAVE_INLINE está definido.
Várias macros são definidos para ajudá-lo a encontrar o máximo ou mínimo de números, com base no tipo de dados. O GSL_MAX de base (a, b) e GSL_MIN (a, b) simplesmente retornar tanto o máximo ou mínimo dos dois números a e b. GSL_MAX_DBL e GSL_MIN_DBL encontrar o máximo e o mínimo de duas duplas usando uma função inline. GSL_MAX_INT e GSL_MIN_INT fazer o mesmo para argumentos inteiros.
Quando você fizer qualquer tipo de cálculo numérico em um computador, os erros sempre são introduzidos por arredondamento e truncagem. Isso é porque você não pode reproduzir exatamente os números em um sistema binário finito. Mas, e se você quiser comparar dois números e ver se eles são aproximadamente os mesmos? GSL fornece a função gsl_fcmp (x, y, epsilon). Esta função compara as duas duplas X e Y, e verifica para ver se eles estão dentro epsilon uns dos outros. Se eles estiverem dentro desta faixa, a função retorna 0. Se x <y, ele retorna -1 e retorna 1 se x> y.
Os números complexos são utilizados em muitos campos científicos. Dentro GSL, tipos de dados complexos são definidos na gsl_complex.h ficheiro de cabeçalho, e funções relevantes são definidos em gsl_complex_math.h. Para armazenar números complexos, o gsl_complex tipo de dados é definido. Esta é uma estrutura que armazena as duas porções. Você pode definir os valores com o gsl_complex_rect funções (x, y) ou gsl_complex_polar (x, y). No primeiro, o que representa x + iy; enquanto que no segundo, x é o raio, e Y é o ângulo em uma representação polar. Você pode retirar as partes real e imaginária de um número complexo com o GSL_REAL macros e GSL_IMAG. Existe uma função disponível para encontrar o valor absoluto de um número complexo, gsl_complex_abs (x), onde x é de gsl_complex tipo. Porque na verdade, números complexos são construídos de duas partes, mesmo aritmética básica não é simples. Para fazer matemática básica, você pode usar o seguinte:

    
gsl_complex_add (a, b)

    gsl_complex_sub (a, b)

    gsl_complex_mul (a, b)

    
gsl_complex_div (a, b)
Pode-se calcular o conjugado com gsl_complex_conjugate (a) e do inversa com gsl_complex_inverse (a).
Existem funções para matemáticas básicas. Para calcular a raiz quadrada, você usaria gsl_complex_sqrt (x). Para calcular o logaritmo, você usaria gsl_complex_log (x). Vários outros também estão disponíveis.
As funções trigonométricas são fornecidos, como gsl_complex_sin (x). Há também  para funções trigonométricas hiperbólicas, juntamente com as funções pertinentes inversos.
Agora que você tem o básico, o meu próximo artigo vamos explorar todos os cálculos científicos reais você pode fazer. Eu vou olhar para as estatísticas, álgebra linear, números aleatórios e muitos outros tópicos.

Nenhum comentário:

Postar um comentário