GNU Scientific Library

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
GNU Scientific Library
最新版 GSL-1.16 / 2013年7月19日
対応言語 C言語
種別 ライブラリ
ライセンス GNU General Public License
公式サイト http://www.gnu.org/software/gsl/
テンプレートを表示

GNU Scientific Library (GSL) は、ANSI Cで記述された科学技術計算関数のライブラリである。オープンソースであり、GNU General Public Licenseのもとで配布されている。 このプロジェクトは1996年にロスアラモス国立研究所のDr. M. GalassiとDr. J. Theilerの着想に始まり、計算物理の専門家集団(Dr G. Jungman、Dr B. Gough、Dr J. Davies、R. Priedhorsky、Dr M. Booth、Dr F. Rossi、Dr D. Eddelbuettelら)を中心に作成された。

線形計算についてはBLASをサポートしており、CBLAS インターフェイスを実装している。

Linuxをはじめ、Unix系OSを中心にサポートしている。Microsoft Visual Studio用のバイナリもある。

コーディングに使われた参考論文のレファレンス、文献等も充実している (リファレンス・マニュアルには日本語訳がある)。リファレンス・マニュアルにはサンプル・コードも多数収録されている。PSPPPerl Data Language (en)、O2scl[1] などのフリーウェア・プロジェクトでも利用されている。

複素数型やベクトル/行列型などは ANSI C で規定されている構造体で実装されており、C++ のクラスではない。そのためたとえば、複素数オブジェクト同士の加算が + 演算子で行えるようになっている訳ではなく、加算のための関数 (この場合 gsl_complex_add) を、二つの複素数オブジェクトを引数として呼ばねばならない。

拡張倍精度以上の精度における計算は、変数の内部表現が言語仕様で標準化されておらず、さらに環境に依存して精度が大きく変化するために対応していない。

開発[編集]

GSL の開発チームは、GSL が GNU プロダクトであることを明示しており、GSL のコードはすべて誰もが自由に、どんな用途にでも使えることを保証している。そのために、プロプライエタリなコードや (たとえばニュメリカル・レシピ (en) などの) GNU の定義するプリーソフトウェアに該当しないコードとは対立した開発姿勢をとっている。

2011年現在、年に1〜2回のメンテナンス・リリースによるバグ修正対応が基本になっている。一方でブロックやスライスといったデータ構造の有用性や C++ 対応の是非についての議論も ML 上で行われており、もし議論が収束して開発陣での合意が形成されれば、バージョン 2.0 で反映される可能性があるが、具体的なスケジュールを考慮するような段階ではない。

C++ サポート[編集]

GSL は C 言語ライブラリであるため、C++のクラスから利用できる。しかしメンバー関数へのポインタは、その型が関数へのポインタとは異なる[2]ため、利用できない。関数へのポインタは、静的に定義された関数 (C言語における一般的な関数定義によるもの) に対して利用する必要がある。

C++から GSL を利用するためのラッパーも複数あるが、いずれも不完全であり、どの開発もあまり活発ではないか、停止している。GSL のヘルプ・メイリング・リストの議論[3]では、ラッパーを使わなくても普通に関数を呼ぶのに支障はない、ベクトル用にラッパーを作って使っている、線形代数が目的ならEigen[4]がある、などの情報が寄せられている。

なお、Microsoft Visual Studio 2008用にまとめられたパッケージが公開されている[5]

他の言語とのバインディング[編集]

FORTRAN から GSL の各関数を利用するためのインターフェイスが開発中であり、β版がリリースされている[6]。またラッパーを自作したい場合の情報も公開されている[7]

GNU Octave から GSL の特殊関数を利用できるパッケージがリリースされている[8]

GSL のホームページ[9] に紹介されているもののうち、現在も開発が続いている主な言語バインディングを以下に挙げる。

プログラム例[編集]

ベッセル関数の値を計算する C プログラムの例を以下に示す[10]

#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;
}

GNU Make を使って上のプログラムをコンパイルし、GSL とリンクしようとする場合、そのコマンドは Makefile ファイル中では以下のようになる。

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

上のコマンドで生成された実行ファイルを実行すると、以下のように出力する。計算値の精度は倍精度実数である。

J0(5) = -1.775967713143382920e-01

提供する機能[編集]

関連項目[編集]

脚注[編集]

[ヘルプ]
  1. ^ [1]
  2. ^ pointer to member function (英語)
  3. ^ C++ラッパーの有無に関する質問と返答 (英語)
  4. ^ Eigen ホームページ (英語)
  5. ^ GSL Visual Studio 移植版
  6. ^ http://www.lrz-muenchen.de/services/software/mathematik/gsl/fortran/index.html FGSL: A Fortran interface to the GNU Scientific Library (英語)]FGSL 原著論文 (英語)
  7. ^ Fortranでgsl (日本語)
  8. ^ GNU Octave の `gsl' パッケージ
  9. ^ GSL のホームページ (英語)
  10. ^ オンライン・マニュアル中のサンプル・プログラム

関連書籍[編集]

  • Mark Galassi, Jim Davies, James Theiler, Brian Gough, Gerard Jungman, Michael Booth, Fabrice Rossi (2001). Gnu Scientific Library Reference Manual, (English), Network Theory Ltd. ISBN 978-0-9541617-0-5 .

外部リンク[編集]