GNU Scientific Library (или GSL ) — это программная библиотека для численных вычислений в прикладной математике и науке . GSL написана на языке C ; доступны оболочки для других языков программирования. GSL является частью проекта GNU [2] и распространяется по лицензии GNU General Public License .
Проект GSL был инициирован в 1996 году физиками Марком Галасси и Джеймсом Тейлером из Лос-Аламосской национальной лаборатории . [3] Они стремились написать современную замену широко используемым, но несколько устаревшим библиотекам Fortran , таким как Netlib . [4] Они выполнили общую разработку и написали первые модули; когда все было готово, они привлекли других ученых для участия.
«Общая разработка библиотеки, а также проектирование и реализация основных модулей» были выполнены Брайаном Гофом и Джерардом Юнгманом. [3] Другими основными участниками были Джим Дэвис , Рейд Придхорски, М. Бут и Ф. Росси. [3]
Версия 1.0 была выпущена в 2001 году. В последующие годы библиотека расширялась медленно; как указано в документации, сопровождающие были больше заинтересованы в стабильности, чем в дополнительной функциональности. Основная версия 1 закончилась выпуском 1.16 в июле 2013 года; это была единственная публичная активность за три года 2012–2014.
Активная разработка возобновилась с публикацией версии 2.0 в октябре 2015 года, которая включала пользовательские исправления. Последняя версия 2.8 была выпущена в мае 2024 года.
Следующий пример программы вычисляет значение функции Бесселя первого рода и нулевого порядка для 5: [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 ) пример.c $( gsl-config --libs )
Вывод показан ниже и должен быть верным с двойной точностью :
J0(5) = -1,775967713143382920e-01
Библиотека программного обеспечения предоставляет возможности для:
Поскольку GSL написан на языке C, легко предоставить оболочки для других языков программирования. Такие оболочки в настоящее время существуют для
GSL можно использовать в классах C++ , но не с использованием указателей на функции-члены, поскольку тип указателя на функцию-член отличается от указателя на функцию . [23] Вместо этого необходимо использовать указатели на статические функции. Другим распространенным обходным путем является использование функтора .
Доступны оболочки C++ для GSL. [7] [8] [9] [10] Не все из них регулярно поддерживаются. Они предлагают доступ к классам матриц и векторов без необходимости использования интерфейса GSL для функций malloc и free . Некоторые также предлагают поддержку для создания рабочих пространств, которые ведут себя как классы интеллектуальных указателей . Наконец, есть (ограниченная, по состоянию на апрель 2020 г.) поддержка, позволяющая пользователю создавать классы для представления параметризованной функции как функтора .
Хотя они и не являются строго оболочками, существуют некоторые классы C++ [24] [25] , которые позволяют пользователям C++ использовать библиотеку Gnu Scientific с функциями оболочки.