GNU Scientific Library (или GSL) это библиотека, написанная на языке программирования C для численных вычислений в прикладной математике и науке. GSL является частью проекта GNU и распространяется на условиях лицензии GPL.
GNU Scientific Library | |
---|---|
Тип | библиотека |
Разработчики | Brian Gough[вд] и Patrick Alken[вд] |
Написана на | Си[2] |
Операционные системы | GNU/Linux[3], BSD[вд][3], Windows[3], macOS[3] и GNU/Hurd[вд][3] |
Первый выпуск | 1996 |
Последняя версия | |
Репозиторий | git.savannah.gnu.org/cgi… |
Лицензия | GPL 3.0+[4][5] |
Сайт | gnu.org/software/… (англ.) |
Медиафайлы на Викискладе |
GSL используется, в частности, в таком программном обеспечении, как PSPP и Perl Data Language.
Пример
правитьСледующая программа вычисляет значение функции Бесселя для 5:
#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;
}
Программа должна быть скомпонована с библиотекой GSL после завершения компиляции:
gcc $(gsl-config --cflags) example.c $(gsl-config --libs)
Вывод программы:
J0(5) = -1.775967713143382920e-01
Возможности
править- Элементарные функции
- Комплексные числа
- Полиномы
- Специальные функции
- Векторы и матрицы
- Перестановки
- Сочетания
- Сортировка
- Линейная алгебра
- Собственные векторы, значения и пространства
- Быстрые преобразования Фурье
- Численное интегрирование
- Генераторы псевдослучайных чисел
- Генераторы квазислучайных чисел
- Распределения вероятностей
- Статистика
- Гистограммы
- Кортежи
- Интегрирование методом Монте-Карло
- Алгоритм имитации отжига
- Обыкновенные дифференциальные уравнения
- Интерполяция
- Численное дифференцирование
- Разложение по полиномам Чебышёва
- Суммирование рядов
- Преобразование Ханкеля
- Поиск корней
- Оптимизация
- Метод наименьших квадратов
- Алгоритм Левенберга — Маркардта
- Физические константы
- Операции с числами с плавающей запятой в формате IEEE
Поддержка C++
правитьGSL может использоваться в классах C++, исключая использование указателей на методы, потому что тип указателя на метод отличается от типа указателя на функцию. Вместо этого должны использоваться указатели на статические функции.