Biblioteka GSL (index)


Biblioteka GSL (1) - wprowadzenie

OPIS

Biblioteka GSL (GNU Scientific Library) jest napisana w ANSI C.

Program raportujący konfigurację GSL to gsl-config.


$ gsl-config --prefix
/usr            # położenie GSL
$ gsl-config --libs
-L/usr/lib -gsl -gslcblas -lm     # library linking information
$ gsl-config --version
1.6         # wersja dla Debian Sarge
1.11        # wersja dla Debian 5 Lenny
1.15        # wersja dla Debian 7 Wheezy

KOMPILACJA


#
# Makefile
#

CC = gcc
LIB = -lgsl -lgslcblas -lm
# Inne dodatkowe przełączniki:
# -lgsl -lgslcblas    (wspierająca biblioteka CBLAS)
# -lgsl -lcblas     (alternatywa)
# -lgsl -cblas -latlas     (jeszcze biblioteka ATLAS i jej interfejs CBLAS)

CFLAGS = -g -Wall -ansi -pedantic
# Compiler flags:
#	-g	-- Enable debugging
#	-Wall	-- Turn on all warnings
#	-ansi	-- Don't use GNU extensions.  Stick to ANSI C.

FILE = main.c
TARGET = main.out

$(TARGET): $(FILE) Makefile
	$(CC) $(CFLAGS) -o $(TARGET) $(LIB) $(FILE)

# Okreslenie celow sztucznych.
.PHONY : clean 

clean:
	$(RM) $(TARGET) core

OBSŁUGA BŁĘDÓW W GSL

Funkcje zwracają kody błędów, które można przekonwertować na string czytelny dla użytkownika. Oprócz tego biblioteka posiada an error handler function gsl_error, która wypisuje krótki komunikat i kończy program.


#include <gsl/gsl_errno.h>

int status = gsl_function(...)
if (status) {   /* pojawia się błąd */
	/* trzeba zareagować na błąd, można wypisać jako string */
	fprintf(stderr, "error: %s\n", gsl_strerror(status));
	exit(1);   /* można zakończyć program */
}

PODSTAWOWE FUNKCJE

Funkcje z GSL zaczynają się gsl_*, a makra GSL_*. GSL dużo korzysta z typu "long double", który zależy od platformy.


// Podstawowe nagłówki w programach, które zawsze występują.

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

// Są stałe matematyczne M_PI, M_SQRT2,...
// Są makra GSL_IS_ODD (n), GSL_IS_EVEN (n)
// Chyba nie trzeba już dawać math.h.

#define GSL_MAX(a, b)   ((a) > (b) ? (a):(b))
#define GSL_MIN(a, b)   ((a) < (b) ? (a):(b))
#define GSL_SIGN (x)   ((x) >= 0 ? 1 : -1)

// Są funkcje do wydajnego obliczania niskich potęg zmiennej.

double gsl_pow_int(double x, int n);
double gsl_pow_2(const double x);   /* aż do potęgi 9 */
double gsl_pow_3(const double x);
double gsl_pow_4(const double x);
double gsl_pow_5(const double x);
double gsl_pow_6(const double x);
double gsl_pow_7(const double x);
double gsl_pow_8(const double x);
double gsl_pow_9(const double x);

ZADANIE 1.1 (HORNER)

Obliczanie wartości wielomianu metodą Hornera.


#include <gsl/gsl_poly.h>

double gsl_poly_eval (const double c[], const int len, const double x);
// c[0] + c[1]*x + c[2]*x^2 + ... + c[len-1]*x^{len-1}
// Moja własna funkcja ma zamienione c[] i len, bo sugerowałem się
// porządkiem dla dmlin.

ZADANIE 1.2 (COMPLEX)

Są liczby zespolone i funkcje do nich.


// Definicje typów zespolonych.

#include <gsl/gsl_complex.h>

// Definicje funkcji zespolonych.

#include <gsl/gsl_complex_math.h>

ZADANIE 1.3 ()


Biblioteka GSL (index)