Biblioteka GSL (index)


Biblioteka GSL (4) - wektory i macierze

WPROWADZENIE

Podstawowe typy danych: gsl_block, gsl_vector, gsl_matrix, oraz odmiany dla typów liczbowych innych niż double. Dla konsystencji cała pamięć jest alokowana poprzez strukturę gsl_block. Wektory i macierze są tworzone przez slicing danego bloku. Domyślnie wektory i macierze mają włączone sprawdzanie poprawności indeksu.


// Definicje funkcji do zarządzania blokami są w tym nagłówku.
#include <gsl/gsl_block.h>

typedef struct {
	size_t size;   // rozmiar bloku
	double *data;   // wskaźnik do obszaru pamięci
} gsl_block;

// Definicje funkcji do zarządzania wektorami są w tym nagłówku.
#include <gsl/gsl_vector.h>

typedef struct {
	size_t size;   // liczba elementów wektora; zakres [0, size-1]
	size_t stride;   // rozmiar jednego elementu (fizycznie)
	double *data;   // wskaźnik do obszaru pamięci (do pierwszego elem)
	gsl_block *block;   // wskaźnik do bloku posiadanego przez wektor
	int owner;   // ownership flag (1-posiada, 0-nie posiada)
} gsl_vector;

// Położenie w pamięci i-tego elementu to v->data[i*v->stride].
// Dzięki stride można chyba tworzyć wektory przechowujące różne
// inne obiekty. Można też zrobić widok np. tylko na parzyste elementy.

// Definicje funkcji do zarządzania macierzami są w tym nagłówku.
#include <gsl/gsl_matrix.h>

typedef struct {
	size_t size1;   // zakres wierszy [0, size1-1]
	size_t size2;   // zakres kolumn [0, size2-1]
	size_t tda;   // fizyczny rozmiar wiersza
	double *data;   // wskaźnik do pierwszego elementu macierzy
	gsl_block *block;
	int owner;
} gsl_matrix;

ZADANIE 4.1


Biblioteka GSL (index)