数値解析(松尾)2012 講義情報

連絡先: 松尾宇泰,工6号館3階354号室   matsuoあっとmist.i.u-tokyo.ac.jp   ※重要な用件は直接会いに来てください.

お知らせ



目次:  試験について  レポート  資料  文献・URL  講義メモ


■ 試験について



■ レポート



■ 配付資料 (PDF)

※ここに掲載の資料について,その無断転載・配布を禁じます.

■ 文献・URL

[初学者・実用向け]
[応用数学者向け]
[線形計算]
[微分方程式]
[URL]



■ 講義の補足メモ

 ここには,講義では触れられないけれど,過去に質問を受けたりして情報補遺が有用であると思われる点について,補足します.

 目次:「ライブラリ」とは何か?  「ライブラリ」ってどうやって使うの?  グラフ描画ツールgnuplot


★ 「ライブラリ」とは何か?
 レポートの感想欄に「ライブラリとは何か?」という疑問がありました.プログラミングにおける「ライブラリ」とは,メインとなるプログラミング言語と組み合わせて使うもので,よく使われる機能について予めプロがプログラミングしたコードのことです.ユーザーは,それをメインプログラムから呼び出すだけで簡単に利用でき,プログラミングの手間を省けると共に,プロでなくては難しい細かい微調整(コードの最適化)も考えずに済みます.
 『数値解析』の限られた時間ではプログラミング(Scilab 等の使い方を含む)まで十分にサポートできないので,いずれそのような教育を受け使えるようになった際のために,ひとまずは『数値解析』で学んだ種々のアルゴリズムのほとんどが,「ライブラリ」の形で利用可能であるということだけでも覚えておいてください.

 なお講義の初回で強調しましたが,あるアルゴリズムを と, は異なる目的意識であり,どちらを重視するかは個々のユーザーの置かれた環境によって異なります.しかしどちらか一方だけで良いということは決してありません.ライブラリを使って解いた結果がおかしいときには,そもそも数学的にアルゴリズムがどう動くはずなのかを大体理解している方が問題を素早く追跡できますし,反対に,あるアルゴリズムの数学的な定式化だけを理解していて,それを実装も利用もできないのでは意味がありません(「数値計算アルゴリズム」は使って初めて意味があるものです!)

 この講義では両者のバランスを努めて強調しているつもりですが,悪く言えばどちらも中途半端になっている面も否定できません.疑問に思う点があったら遠慮なく質問してください(メールでもOK).また,皆さん,他の講義も満載で忙しいとは思いますが,講義で与えられる情報に満足せず,ネットの海に漕ぎだして自力でいろいろ勉強してみることも薦めます.

 なお,次の項目も是非読んでみてください.


★ 「ライブラリ」ってどう使うの?
 この講義では,初心者でも使いやすい Scilab(もしくは MATLAB)を推奨していますが,これ(ら)は自動的にライブラリが使えるようになっているので,「どう使うの?」ということをあまり考える必要はありません.たとえばLU分解するには, [L U P]=lu(A)と書けばOKです.

 一方,もともとC言語などでプログラミングに自信があって,ぜひそちらでやってみたいという人は,もちろんそれでも構いませんが,そのとき,プロの書いたライブラリを使いたくなったらどうするか・・・.(ただしレポートは,プロのライブラリを使わなくても解答できるようになっていますので,念のため).結論から言って,実はそれをやるのはなかなか面倒です.

 プロのライブラリを使うには,大きく分けて2つの方法があります.

 ライブラリ本来のまっとうなやり方は,ライブラリを,自分の使っているプログラミング環境に「インストール」し,自分のプログラムからそれを「呼び出す」ことです.しかしどうやって「インストール」し,どうやって「呼び出す」のかは,それなりにコンピュータに詳しい人でないと分からないでしょう.(少なくとも,この講義をきっかけにC言語などを勉強し始めた,という人にはまず無理です)

 もうひとつのやり方は,プロが書いたソースコードを,必要なところだけ抜き出して自分のプログラムに貼り付ける方法です.(本に載っているプログラムを自分のプログラムに貼り付けるような感じですね).以下,上にリンクのある Lapack(Fortran77)と CLapack(C)の場合に,どうやるのかを簡単に説明します.

 まずLapack(Fortran77)の場合から説明します.Lapackのページに行って,[Indivisual Routines]-[Index of LAPACK Double Precision REAL Rourines]などを選択すると,関数のリストが表示されます.

 たとえばdgecon.fというのは,"Estimates the reciprocal of the condition number of a general matrix, in either the 1-norm or the infinity-norm, using the LU factorization computed by DGETRF",つまりLU分解形を用いて行列の条件数を推定するルーチンで,なかなか便利そうです.ここで "dgecon.f plus dependencies" というリンクをクリックすると,dgecon.f を動かすために必要な関連ルーチンをまとめてダウンロードできます(便利!).LapackはBLASライブラリも使いますが,この中の関連ルーチンも併せてダウンロードできます.あとは,これを自分のFortran77プログラムの中に,まとめて貼り付ければOKです.ただし, に注意が必要です.自分が使いたい関数をどう呼び出せばいいかは,そのソースコードに丁寧に書いてあります.

 C言語版のCLAPACKは,Fortran77版のLapackを機械的に変換して得られているため,使うためにもう少し手順が要ります.ここでは次の手順をお奨めします.
  1. Clapack のページからWindowsやUNIX系など,適当なアーカイブをダウンロードします.(欲しいのはソースコードなので,OSに関わりなく解凍しやすいものを選んでもいいかもしれません).そしてそのアーカイブを解凍してSRCフォルダを取り出します.この作業は一度だけやればOKです.
  2. 次に,上の要領でいったんFortran77版で欲しい関数を検索,ダウンロード(依存関係付き)して,自分がやりたい計算のために必要な関数のリストを得ます.
  3. 上で取り出しておいたSRCフォルダの中から必要な関数をかき集めて,自分のプログラムに貼り付けます.ただしヘッダファイルは,各関数の参照するものの和集合をプログラム全体の冒頭で宣言することになります.(と同時に,対応するヘッダファイルを用意する必要があります)
多分,これでOKだと思いますが,松尾は試していません. 試した猛者がいましたら,ぜひ情報を教えてください.

 また,Java版のjlapackでも同じようなことができると思いますが,こちらも未確認です.手順は同様と思いますので割愛します.


★ グラフ描画ツール gnuplot
 グラフを描け,という課題は,何でグラフを描いても構いませんが,いまから何かツールを手に入れたい人は,たとえば gnuplot というフリーソフトがプロの研究者も使う定番のグラフツールです.

 gnuplot の説明は,たとえばWikipedia の gnuplot 説明ページを参照し,その中のリンクを適宜辿ってみてください.またいくつか初心者向けの本も出ています(書籍部を探してください).日本語による説明は,gnuplot tipsにもあります.

 gnuplot は Windows を始めとする多くの OS 上で動きます.
 Windows の人は,たぶん,gp422win32.zipをダウンロードすれば良いはずです.