Programowanie w systemie UNIX/GSL

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

Instalacja[edytuj]

W Ubuntu 14.04 są pakiety:[1]

  • gsl-bin: GNU Scientific Library (GSL) -- binary package
  • libgsl0-dbg: GNU Scientific Library (GSL) -- debug symbols package
  • libgsl0-dev: GNU Scientific Library (GSL) -- development package
  • libgsl0ldbl: GNU Scientific Library (GSL) -- library package

Instalacja

 sudo apt-get install libgsl0ldbl
 sudo apt-get install libgsl0-dev


Sprawdzamy biblioteki:

gsl-config --libs

Otrzymujemy informacje o katalogu i opcjach linkera:

-L/usr/lib -lgsl -lgslcblas -lm


Inna metoda: [2]

sudo apt-get install gsl-bin

Pierwszy program[edytuj]

Poniższy przykładowy program oblicza wartość funkcji Bessela[3] dla argumentu 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;
}

Kompilacja[edytuj]

ręczna[edytuj]

gcc -L/usr/lib -lgsl -lgslcblas -lm example.c

z użyciem gsl-config[edytuj]

gcc $(gsl-config --cflags) example.c $(gsl-config --libs)

make[edytuj]

Opis [5]

Wynik pracy programu[edytuj]

Wynik powinien być poprawny dla podwójnej precyzji:


J0(5) = -1.775967713143382920e-01

Silnia[edytuj]

W formie naturalnej[edytuj]

#include <stdio.h>
#include <gsl/gsl_sf.h>


// gcc -I/usr/include/gsl/ -L/usr/local/lib/ -lgsl -lgslcblas -lm f.c
// http://www.gnu.org/software/gsl/manual/html_node/Special-Function-Usage.html#Special-Function-Usage
// The natural form returns only the value of the function and can be used directly in mathematical expressions.

int main(void)
{
  unsigned int n = 100;
  double result;

  result = gsl_sf_fact(n);


 
  printf("factorial( %d ) = %.0f\n", n,result);
  

  return 0;
}


Wynik działania:

./a.out
factorial( 100 ) = 933262154439441509656467047959538825784009703731840988310128895405822272385704312950661130
89288327277825849664006524270554535976289719382852181865895959724032


W formie wychwytującej błędy[edytuj]

#include <stdio.h>
#include <gsl/gsl_errno.h>
#include <gsl/gsl_sf.h>


// gcc -I/usr/include/gsl/ -L/usr/local/lib/ -lgsl -lgslcblas -lm f.c
// gcc -I/usr/include/gsl/ -L/usr/lib/ -lgsl -lgslcblas -lm f.c
// factorial
// http://www.gnu.org/software/gsl/manual/html_node/Special-Function-Usage.html#Special-Function-Usage
// The error-handling function
// http://www.gnu.org/software/gsl/manual/html_node/Special-Functions-Examples.html#Special-Functions-Examples
/*




*/
 
int main(void)
{
  unsigned int n = 100;
  int status; 
  gsl_sf_result result;

  status = gsl_sf_fact_e (n, &result);


  printf("status  = %s\n", gsl_strerror(status));
  printf("factorial( %2d ) = %f\n", n,result.val);
  printf("+/- % .18f\n",result.err); 

  return 0;
}


Wynik:

./a.out
status  = success
factorial( 100 ) =    933262154439441509656467047959538825784009703731840988310128895405822272385704312950661130
89288327277825849664006524270554535976289719382852181865895959724032
+/-  4144516527479786869998377376409676501474209436767641660238087976812259116180322817471642386
      5792481641279576393802186138583881092629521428905984.000000000000000000

Znajdowanie zer równań[edytuj]

Wielowymiarowe metody[6]

Odnośniki[edytuj]

  1. Ask Ubuntu : Install GNU Scientific library (GSL) on Ubuntu 14.04 via terminal
  2. askubuntu question :how-can-i-run-an-c-c-program-that-use-gnu-scientific-library-gsl
  3. Funkcje Bessela w wikipedii
  4. An Example Program – GNU Scientific Library – Reference Manual
  5. Getting started with GSL by Darren Wilkinson
  6. gsl: Example-programs-for-Multidimensional-Root-finding