出典(authority):フリー百科事典『ウィキペディア(Wikipedia)』「2015/04/21 23:38:43」(JST)
最新版 | 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用のバイナリもある。
コーディングに使われた参考論文のレファレンス、文献等も充実している (リファレンス・マニュアルには日本語訳がある)。リファレンス・マニュアルにはサンプル・コードも多数収録されている。PSPP、Perl Data Language (en)、O2scl[1] などのフリーウェア・プロジェクトでも利用されている。
複素数型やベクトル/行列型などは ANSI C で規定されている構造体で実装されており、C++ のクラスではない。そのためたとえば、複素数オブジェクト同士の加算が + 演算子で行えるようになっている訳ではなく、加算のための関数 (この場合 gsl_complex_add) を、二つの複素数オブジェクトを引数として呼ばねばならない。
拡張倍精度以上の精度における計算は、変数の内部表現が言語仕様で標準化されておらず、さらに環境に依存して精度が大きく変化するために対応していない。
GSL の開発チームは、GSL が GNU プロダクトであることを明示しており、GSL のコードはすべて誰もが自由に、どんな用途にでも使えることを保証している。そのために、プロプライエタリなコードや (たとえばニュメリカル・レシピ (en) などの) GNU の定義するプリーソフトウェアに該当しないコードとは対立した開発姿勢をとっている。
2011年現在、年に1〜2回のメンテナンス・リリースによるバグ修正対応が基本になっている。一方でブロックやスライスといったデータ構造の有用性や C++ 対応の是非についての議論も ML 上で行われており、もし議論が収束して開発陣での合意が形成されれば、バージョン 2.0 で反映される可能性があるが、具体的なスケジュールを考慮するような段階ではない。
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
ポータル FLOSS |
[ヘルプ] |
GSL may refer to:
This disambiguation page lists articles associated with the title GSL. If an internal link led you here, you may wish to change the link to point directly to the intended article. |
リンク元 | 「隅角癒着解離術」 |
関連記事 | 「G」「GS」「GSLs」 |
.