• 検索結果がありません。

GSLを使ってみよう

N/A
N/A
Protected

Academic year: 2021

シェア "GSLを使ってみよう"

Copied!
19
0
0

読み込み中.... (全文を見る)

全文

(1)

GSLを使ってみよう

Visual C/C++で数値計算ライブラリを使う方法のメモ

九州大学大学院 工学研究院

航空宇宙工学部門 宇宙機ダイナミクス研究室

平山寛

2008/6/20

(2)

「車輪の再発明」をしていないか?

車輪の再発明(しゃりんのさいはつめい)とは、「広く受け入れられ確立した

技術や解決法を無視して、同様のものを再び一から作ってしまう事」の慣用

句。英語では Reinventing the wheel であり、世界中で使われる。

車輪を題材にして、「広く受け入れられ確立した技術や解決法を無視して、

同様のものを再び一から作ってしまう事」を示している。新たな付加価値が

何もないものを作成するのにコストをかけることから、皮肉的なニュアンスで

用いられる。再発明を行ってしまう理由としては、「既存のものの存在を知ら

ない」「既存のものの意味を誤解している」といったことが挙げられる。主に

IT

業界、特に

SE・プログラマの間で良く用いられる。これらの業界では、

ライブ

ラリや先行事例があるにもかかわらず、多様な理由でそれを利用せず、コー

ドやプログラミング技法を再び一から作ってしまう事

が多い。

教育の現場では、ある技術の意味を理解させるために、意図的に車輪の再

発明を行わせる場合がある。

ウィキペディアの解説より引用

(3)

数値計算の場合・・・

z我々の分野でよく使う数値計算

¾数値積分(微分方程式)

¾ベクトル・行列計算

¾ベッセル関数,ルジャンドル関数(摂動問題で)

zこれらは再発明しなくても、既存の数値計算

ライブラリが利用できる。有名なのは、

¾Numerical Recipes → 研究室に書籍があります

(ソースは書籍を見て打ち込むか、別途購入)

¾GSL → これを使ってみよう!

(4)

GSLって?

産総研・富永氏による和訳マニュアルから引用

GNUはUNIXの世界では

定評のある、フリーソフト

フェア開発の有志団体。

(5)

信用できるだろうか?

z ブラックボックスにならないか?

¾ ソースコードは公開されています。

¾ 数百ページに及ぶ詳細な説明書も公開されています。

つまり

Numerical Recipesを丸写しするのと透明度は違わない。

解説文書が不完全な、先輩のプログラムをもらうより良いかも。

z 最新版がダウンロードできる

¾ 改訂の遅いNumerical Recipesの書籍版(とくに日本語)

よりバグは少ないと考えられる。

Numerical Recipes も購入すればダウンロードできますが。

z 開発集団はボランティアとはいえ計算科学の専門家

¾ (恐らく)我々程度の生半可なプログラマが作るコードより

信頼できると考えます。

数値計算の理論そのものが

専門ではないという意味で。

(6)

入手方法

z

2008年6月現在 最新版はgsl-1.11

z ソースコード(GNU公式サイトから)

http://www.gnu.org/software/gsl/

¾

UNIXならソースからコンパイルしてインストール

z

Windows Visual C/C++用

コンパイル済みバイナリファイル(

CERNから)

http://service-spi.web.cern.ch/service-spi/external/distribution/

¾ ここからGSL_<version>__LCG_<platform>.tar.gz

というファイルをダウンロード

¾ 最新版はGSL_1.10__LCG_win32_vc71.tar.gz

ちなみにCERNは欧州の素粒子研究所で、

計算科学にも強く、WWW発祥の地。

(7)

展開

ztar.gzを展開できるソフトで、展開する。

z下図のようなディレクトリ構成になる。

¾include¥gsl

ディレクトリ内にはヘッダファイル

(拡張子 *.h)

¾lib

ディレクトリ内にはライブラリファイル

(拡張子 *.lib, *.dll)

(8)

ヘッダファイルの配置

z 展開した

gsl

フォルダを

(Visual Studioのインストール先)¥VC¥include

の中にコピー

z これで、ソースファイルからは

#include <gsl/gsl_***.h>

として参照できる。

(9)

静的ライブラリ(*.lib)の配置

z (Visual Studioのインストール先)¥VC¥lib

内に

gsl

フォルダを作る

z 展開した

lib

フォルダ内の

*.lib

ファイルを

(Visual Studioのインストール先)¥VC¥lib¥gsl

の中にコピー

*.exp ファイルは、ふつう使いませんが、

とりあえず一緒にコピー

(10)

動的ライブラリ(*.dll)の配置

z gsl.dll

gslcblas.dll

を実行PATHの通った所に置く。

定番の場所は、

¾ 今後よく使うようなら、

C:¥WINDOWS¥system32

内へコピー。

この場合、一度だけコピーすればよい。

¾ たまにしか使わないようなら、先にプロジェクトを作製(次頁以降)し、

コンパイルしてから、生成された実行ファイル(*.exe)と同じ場所へコピー。

プロジェクトフォルダ内の、

debug

ないし

release

というフォルダである。

この場合、新しいプロジェクトを作るたびに、DLLをコピーして入れる必要がある。

又は

system32

gsltestというプロジェクトで使用する例

(11)

Visual C/C++での設定概要

z 以上で、GSLの使用準備は完了。

z 続いて、

Visual C/C++での作業となる。

1. 新規プロジェクトを作製

2. C/C++のプログラムソースを作成

(使用する関数のヘッダファイルをインクルードする)

3. プロジェクトのプリプロセッサを設定

4. 静的ライブラリを設定

5. コンパイル

6. (必要なら)DLLを実行フォルダにコピー

7. 実行

z これらの設定は、新規プロジェクトを作製するたび

に行うこと。3番以降の手順は、DebugからRelease

に切り換えたときも設定し直すこと。

(12)

プログラミング

zプロジェクトを作成する

z拡張子*.c ないし *.cpp のプログラムを作製

z使用する関数のヘッダファイルをインクルード

¾#include <gsl/gsl_***.h>

とします

¾***

のところは関数の説明書で調べること

gsl_matrix.hなど)

(13)

プリプロセッサの設定

z 「プロジェクト」メニューから「プロパティ」を開く

z 「構成プロパティ」→「C/C++」→「プリプロセッサ」

z 「プリプロセッサの定義」に

;GSL_DLL を追加

プロジェクトにC/C++のソースファイル

を追加してからでないと現れない

(14)

静的ライブラリの設定

z 「プロジェクト」メニューから「既存項目の追加」して

z ライブラリフォルダに保存してある

*.lib

ファイルを

プロジェクトに追加

¾ gsl.lib

GSL基本ライブラリ:必須

¾ gslcblas.lib

線形代数ライブラリ:必要に応じて

(BLAS = Basic Linear Algebra Subprogram)

gsl.exp

gslcblas.exp

gslML.lib

gslcblasML.lib

は、特殊なプロジェ

クトで使います。

とりあえず無視。

プロジェクトのプロパティで

設定する方法もあるけど、

難しいので説明省略します。

ドラッグ&ドロップでも追加できます

(15)

サンプルプログラム

#include <stdio.h> #include <gsl/gsl_rng.h> #include <gsl/gsl_vector.h> #include <gsl/gsl_blas.h> int main (void) {

const gsl_rng_type * T = gsl_rng_default; gsl_rng * r = gsl_rng_alloc (T);

int i;

printf ("Here are ten random numbers in the range 0-99:¥n"); for (i = 0; i < 10; i++) { int k = gsl_rng_uniform_int (r, 100); printf(" %d", k); } printf("¥n"); { double x[5] = { 1.0, 2.0, 3.0, 4.0, 5.0} ; double y[5] = { 5.5, 4.4, 3.3, 2.2, 1.1} ; gsl_vector_view v = gsl_vector_view_array(x, 5); gsl_vector_view w = gsl_vector_view_array(y, 5); printf("blas operation DAXPY¥n");

printf("x:"); for (i = 0; i < 5; i++) { printf(" %g", x[i]); } ; printf(" y:"); for (i = 0; i < 5; i++) { printf(" %g", y[i]); } ; gsl_blas_daxpy (1.0, &v.vector, &w.vector);

printf("¥n");

printf("a x + y:"); for (i = 0; i < 5; i++) { printf(" %g", y[i]); } ; } printf("¥n"); return 0; }

乱数発生と行列演算のデモ

実行結果

GSL 1.2 for Visual C

に付属していたサンプルです。

(16)

配布上の注意

zプログラムが完成し構成を「Debug」から

Release」に変えたなら、プリプロセッサ

の設定で

;GSL_DLL

を追加し直す。

zコンパイルした実行ファイルを、人に渡す

ときは、実行ファイルと同じフォルダに

gsl.dll

gslcblas.dll

を入れてあげるとよい。

(17)

本稿での開発環境

zこの文章は以下の環境に基づいて執筆した

¾Microsoft Windows XP SP2 Professional

¾Microsoft Visual C++ 2005 Express Edition

z他のバージョンではフォルダ名や、メニューの

名前が異なるかもしれない。

(18)

参考サイト

z

GSL公式サイト

http://www.gnu.org/software/gsl/

z産総研 富永氏による説明書の和訳

(19)

Numerical Recipesについて

z

Numerical Recipesの公式サイト

http://numerical-recipes.com/

¾

Numerical Recipes in C の英語版は

無料でダウンロードできます。

¾

Numerical Recipes in C++ は書籍販売のみ。

¾ 掲載しているソースコードは$65で販売。

z 研究室にNumerical Recipes in C の

日本語版書籍があります。

¾ 原著の第1版の本文+第2版のコード相当。

¾ 英語の直訳が多く読みにくい。

z 数値計算アルゴリズムの教科書としてはよい

と思うのですが、ネットで検索すると、けっこう

批判意見も見つかるのが気になります。

¾

Why Not Numerical Recipes? など

(和訳)

http://nakano.webmasters.gr.jp/nr.html

¾ まあ、それだけ大勢に利用されている証拠でもある。

参照

関連したドキュメント

スライダは、Microchip アプリケーション ライブラリ で入手できる mTouch のフレームワークとライブラリ を使って実装できます。 また

“Microsoft Outlook を起動できません。Outlook ウィンドウを開けません。このフォルダ ーのセットを開けません。Microsoft Exchange

LicenseManager, JobCenter MG/SV および JobCenter CL/Win のインストール方法を 説明します。次の手順に従って作業を行ってください。.. …

新製品「G-SCAN Z」、 「G-SCAN Z Tab」を追加して新たにスタート 新製品「G-SCAN Z」、 「G-SCAN Z

Visual Studio 2008、または Visual Studio 2010 で開発した要素モデルを Visual Studio

印刷物をみた。右側を開けるのか,左側を開け

HG−CVR2 is ON Semiconductor’s unique method which is used to calculate accurate RSOC. HG−CVR2 first measures battery voltage and temperature. Precise reference voltage is essential

町の中心にある「田中 さん家」は、自分の家 のように、料理をした り、畑を作ったり、時 にはのんびり寝てみた