Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

GNU Scientific Library (или GSL ) является программной библиотекой для численных вычислений в области прикладной математики и науке . GSL написан на C ; оболочки доступны для других языков программирования. GSL является частью проекта GNU [1] и распространяется под Стандартной общественной лицензией GNU .

История проекта [ править ]

Проект GSL был инициирован в 1996 году физиками Марком Галасси и Джеймсом Тайлером из Национальной лаборатории Лос-Аламоса . [2] Они стремились написать современную замену широко используемым, но несколько устаревшим библиотекам Fortran, таким как Netlib . [3] Они выполнили общий дизайн и написали ранние модули; с этой готовностью они наняли других ученых.

«Общая разработка библиотеки, а также дизайн и реализация основных модулей» были выполнены Брайаном Гофом и Джерардом Юнгманом. [2] Другими крупными участниками были Джим Дэвис , Рид Приедорски, М. Бут и Ф. Росси. [2]

Версия 1.0 была выпущена в 2001 году. В последующие годы библиотека расширялась очень медленно; как указано в документации, сопровождающих больше интересовала стабильность, чем дополнительная функциональность. Основная версия 1 закончилась выпуском 1.16 от июля 2013 г .; это было единственное публичное мероприятие за три года 2012–2014 гг.

Активная разработка возобновилась с выходом версии 2.0 в октябре 2015 года. Последняя версия 2.6 вышла в августе 2019 года.

Пример [ править ]

В следующем примере программы вычисляется значение функции Бесселя для 5: [4]

#include  <stdio.h>#include  <gsl / gsl_sf_bessel.h>int  main ( void ) {  двойной  х  =  5,0 ;  двойной  y  =  gsl_sf_bessel_J0 ( x );  printf ( "J0 (% g) =% .18e \ n " ,  x ,  y );  возврат  0 ; }

Программа-пример должна быть связана с библиотекой GSL после компиляции:

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

Результат показан ниже и должен быть правильным с точностью до двойной точности:

J0 (5) = -1,775967713143382920e-01

Особенности [ править ]

Библиотека программного обеспечения предоставляет возможности для:

  • Основные математические функции
  • Комплексные числа
  • Полиномы
  • B-шлицы
  • Специальные функции
  • Векторы и матрицы
  • Перестановки
  • Комбинации
  • Мультимножества
  • Сортировка
  • BLAS
  • Линейная алгебра
  • Eigensystems
  • Быстрые преобразования Фурье
  • Численное интегрирование (на основе QUADPACK )
  • Генерация случайных чисел
  • Квазислучайные последовательности
  • Распределения случайных чисел
  • Статистика
  • Гистограммы
  • N-кортежи
  • Интеграция Монте-Карло
  • Имитация отжига
  • Обыкновенные дифференциальные уравнения
  • Интерполяция
  • Численное дифференцирование
  • Чебышевские приближения
  • Серийное ускорение
  • Дискретное преобразование Ханкеля
  • Поиск корня в одном и нескольких измерениях
  • Минимизация в одном и нескольких измерениях
  • Подгонка наименьших квадратов
  • Нелинейная аппроксимация методом наименьших квадратов
  • Физические константы
  • Арифметика с плавающей запятой IEEE
  • Дискретное вейвлет-преобразование

Привязки языков программирования [ править ]

Поскольку GSL написан на C, легко предоставить оболочки для других языков программирования. Такие обертки в настоящее время существуют для

  • AMPL [5]
  • C ++ [6] [7] [8]
  • Фортран [9]
  • Haskell [10] [11]
  • Java [12]
  • Юлия [13]
  • Лисп [14]
  • Окамл [15]
  • Октава
  • Язык данных Perl
  • Python [16]
  • R [17] [18]
  • Рубин [19]

Поддержка C ++ [ править ]

GSL можно использовать в классах C ++ , но не использовать указатели на функции-члены, поскольку тип указателя на функцию-член отличается от указателя на функцию . [20] Вместо этого следует использовать указатели на статические функции. Другой распространенный обходной путь - использование функтора .

Доступны оболочки C ++ для GSL. [6] [7] [8] Не все из них регулярно обслуживаются. Они предлагают доступ к матричным и векторным классам без необходимости использования пользователем функций malloc и free . Некоторые также предлагают поддержку для создания рабочих пространств, которые ведут себя как классы интеллектуальных указателей . Наконец, существует (ограниченная, по состоянию на апрель 2020 года) поддержка, позволяющая пользователю создавать классы для представления параметризованной функции как функтора .

Хотя это и не являются строго оболочками, существуют некоторые классы C ++ [21] [22], которые позволяют пользователям C ++ использовать научную библиотеку Gnu с функциями оболочки.

См. Также [ править ]

  • Список программного обеспечения для численного анализа
  • Список числовых библиотек
  • Netlib
  • Числовые рецепты

Ссылки [ править ]

  1. ^ http://directory.fsf.org/GNU/
  2. ^ a b c Домашняя страница GSL .
  3. ^ Проектный документ GSL .
  4. ^ Использование библиотеки. Пример программы . Документация GSL.
  5. ^ Привязки AMPL для Научной библиотеки GNU .
  6. ^ a b ccgsl: интерфейс C ++ для научной библиотеки GNU ;
  7. ^ a b GSL - оболочки C ++ для GSL ;
  8. ^ a b GSLwrap: класс-оболочка C ++ для научной библиотеки GNU .
  9. ^ FGSL - Интерфейс Fortran для Научной библиотеки GNU .
  10. ^ Специальный пакет hmatrix, интерфейс для специальных функций GSL .
  11. ^ Пакет hmatrix-gsl, чисто функциональный интерфейс для избранных числовых вычислений, внутренне реализованный с использованием GSL .
  12. ^ Предустановки JavaCPP для GSL .
  13. ^ Интерфейс Джулии к GSL .
  14. ^ GSLL, Научная библиотека GNU для Лиспа .
  15. ^ gsl-ocaml: привязки OCaml к GSL .
  16. ^ Интерфейс Python для научной библиотеки GNU .
  17. ^ RcppGSL: Интеграция 'Rcpp' для векторов и матриц 'GNU GSL' .
  18. ^ gsl: оболочка для научной библиотеки Gnu .
  19. ^ rb-gsl: Ruby / GSL - это интерфейс Ruby к научной библиотеке GNU для численных вычислений с помощью Ruby .
  20. ^ Указатели на функции-члены . Архивировано 13 октября 2004 года на Wayback Machine .
  21. ^ o2scl Объектно-ориентированная научная вычислительная библиотека ;
  22. ^ ят .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • GSL пакет для R (язык программирования) , в R обертка для специальных функций и квази - генераторов случайных чисел.