情報リテラシ(情報学科1年)

数値計算ツールを使いこなそう。

大石進一担当

なぜ数値計算ツールなのか

数値計算ツールを使う理由は幾つかある。その主なものを列挙してみよう。

では,以上のような有用な数値計算ツールはどのような条件を満たしていないといけないか考えられることを列挙してみよう。

では,よく知られている数値計算ツールがこのような条件を満たしているかどうか検証してみよう。

まず,Execlである。これは明らかに,ソースが公開されていない。どんな誤差があってもその理由を知ることも,修正することもできない。そもそも,数値計算ツールとしてみると機能が低すぎる(成績をつけるには便利でも)。

次にMathematicaである。これもソースが公開されていない。それだけでなく,数値計算はできるが,数値計算の最新の成果が利用されていない。すなわち,数値計算の常識が盛り込まれていない。

では,どんなツールがよいのか。

Linux数値計算ツール

Linuxで使える,フリーで有用な数値計算ツールが多くある。それらはある意味でMatlabクローンである。クローンというのは似ている,疑似であるということ。MatlabはWindowsとLinux上で動く商用数値計算ツールである。ソースは公開されていないが,その中身は数値計算の学者にはよく知られ,欧米では理工系の教育には非常に広く利用されている。利用されていない日本は---単に遅れているに過ぎない。

皆さんのパソコンにインストールしてあるScilab(サイラボと発音する)とOctave(オクターブ)はMatlabクローンであるが,フリーな非常に優秀な数値計算ツールである。Matlabのソースが公開されていない点を考えると,前節で考えた条件をすべて満たしているのはこのScilabとOctaveであるといえる。

どうして,ScilabとOctaveが優秀であるのか。その理由を述べるには,数値計算の研究の歴史を知る必要がある。

数値計算の歴史

では,簡単に数値計算の歴史を紐解こう。尚,特に欧米の研究教育のWebコンテンツは充実していて,勉強するのにとても役に立ちます。以下でも,そのようなWebコンテンツを紹介します。皆さんの学部4年間の勉強においてもWebを利用することをお勧めします。

数値計算の最初の偉大な論文を書いたのはvon NeumannとTuringです。この2人は1950年代,計算機が利用できるようなるとすぐに連立一次方程式がコンピュータで実用的な意味で解けるかを調べた論文を書きました。答えは,yesでした。この2人は数理科学の巨人です。数値計算以外にも多くの重要な貢献をしています。

では,近代数値計算分野の専門家で,その創始者は誰だったのでしょうか。

近代数値計算の祖の一人はウイルキンソン(James Hardy Wilkinson))という人です。彼は,1919年イギリスに生まれ,1986年イギリスで亡くなっています。

数値計算の理論とプログラミングに大きな功績を残しています。特に,数値線形代数という,線形代数の問題を数値計算で解く分野で大きな業績を残しています。数値線形代数における後退誤差解析は中でも特に有名です。これは数値計算の理論に大きな影響を与えます。ウイルキンソンの業績については次の文献が参考になります。

E L Albasiny, Dr. James Hardy Wilkinson, FRS, 1919-1986, Utilitas Math. 31 (1987), 7-12.

F L Bauer and A S Householder, In memoriam: J H Wilkinson (1919-1986), Numer. Math. 51 (1987), 1-2.

L Fox, James Hardy Wilkinson, Biographical Memoirs of Fellows of the Royal Society of London 33 (1987), 671-708.

L Fox, Obituary: Dr. J H Wilkinson, FRS, Comput. J. 30 (1) (1987), 1.

E T Goodwin, Obituary: Dr. James Hardy Wilkinson, Bull. Inst. Math. Appl. 23 (1987), 76-77.

B N Parlett, The contribution of J H Wilkinson to numerical analysis, A history of scientific computing (New York, 1990), 17-30.

J K Reid, The contribution of Dr. J H Wilkinson to numerical analysis, Bull. Inst. Math. Appl. 13 (1977), 281-282.

R Stanton, In memoriam: James H Wilkinson, Utilitas Math. 31 (1987), 5.

ウイルキンソンは1940年から,ballistics(弾道)に関する数値計算の研究を始めます。1946年にはロンドンの the National Physical LaboratoryでTuringの助手になります。この研究がきっかけで彼は数値計算の研究を続けていくことになります。彼は,大変優れた理論家であると同時に,数値計算用のパッケージを開発することにも大変熱心でした。1970年にNAG (Numerical Algorithms Group)が活動を開始しますが,線形数値計算ルーチンの多くは彼によるものでした。

LINPACKという線形数値計算パッケージも彼のルーチンをもとに発展されたものでした。 これが発展してLAPACKが作られます。LAPACKは線形代数の問題の数値計算ライブラリとして極めて有用なものです。LAPACKはキャッシュをもつ現代コンピュータのメモリ階層を考えて,LINPACKの高速化を達成したものです。要するに,一度キャッシュに入れたデータを使ってある程度のまとまった計算ができれば,高速化が果たせるというアイディアです。具体的には行列の分割解法が利用されています。キャッシュサイズはCPUによって異なるためLAPACKではBLAS(Basic Liniear Algebraic Subprograms)というベクトルと行列の標準化された演算ライブラリを用意し,LAPACK自身はBLASの言葉で書かれます。BLASを高速化しておけばLAPACKも高速化されるという訳です。

数値計算ツールの歴史

LINPACKやLAPACKはFortranで書かれたサブルーチンライブラリです。その関数名はFORTRANの制約から5文字でした。例えば,ダブルの要素をもつ一般行列の積を実行する関数の名前はdgemmです。これに,出力と入力の変数の書き方などいろいろなルールがあります。したがってこれらのライブラリがいかに優秀でも,それを使いこなすのは大変です。そこで,1984年LINPACKの開発に関わったMolerという学者がMatlabというLINPACKを基にした,インタプリタを開発したのでした。これは,人にわかりやくす,LINPACKの関数を呼び出すインタフェースであると考えることができます。Matlabは実にわかりやすい言語ですので,簡単にプログラムを作ることができます。一方で,人類の英知ともいえるライブラリであるLINPACKの関数を呼び出して問題を解くわけですから,高速で信頼性もあります。Matlabは成功でした。Molerは現代のベンチャーの起業家の走りでもあったわけです。

Matlabは商用で,ソースも公開されていません。そこで,フリーのMatlabクローンが次々に生み出されました。Scilabはフランスの研究所Inriaの開発した非常に優れた数値計算ツールで,原理は基本的にMatlabと同じです。また,Octaveは化学者が開発したこれも優れたMatlabクローンです。

ということでScilabとOctaveの使い方に馴染んでみましょう。

この分野をよくしってもらうために,私は

大石進一:数値計算ツール(コロナ社)2000.10

という本を書きました。これに詳しく解説しましたので参考にしてください。

また,Webを使ってScilabを勉強できる資料も公開しています。これらを使ってScilabとOctaveに馴染んでください。それが今日と明日のテーマです。

5月16日 次の課題をやろう。

課題は5月30日午後12時までにoishi@oishi.info.waseda.ac.jpにメールで送ること。レポート提出状況を掲載するので,そこで自分が提出したことが確認されるまで,レポートは保存すること。また,課題はミスプリを修正したので,改めてダウンロードすること。


最終更新 2001/5/13

©Oishi Shin'ichi

URI: http://www.oishi.info.waseda.ac.jp/~oishi/lec2001/l-1.htm

ホームへ