数値解析(松尾)2012 講義情報
連絡先: 松尾宇泰,工6号館3階354号室
matsuoあっとmist.i.u-tokyo.ac.jp
※重要な用件は直接会いに来てください.
お知らせ
目次:
試験について
レポート
資料
文献・URL
講義メモ
■ 試験について
- 期末試験では「A4のメモ(表裏可)の持ち込み可」です.
期末試験の日程・教室については,掲示板等を注意して見てください.
■ レポート
■ 配付資料 (PDF)
※ここに掲載の資料について,その無断転載・配布を禁じます.
- 数値計算のやり方
- 資料1(10/12;浮動小数点数等)
- 資料2(10/19;連立一次方程式の直接法)
- 資料3(11/2;連立一次方程式の反復法)
- 資料4(11/9;固有値問題)
- 資料5(11/16;非線形方程式の解法)
- 資料6(11/20;補間)
- 資料7(12/21;数値積分)
- 資料8(1/11;常微分方程式の解法)
- 資料9(1/25;補足:偏微分方程式の解法)
■ 文献・URL
[初学者・実用向け]
- 『数値解析入門[増訂版]』(山本哲朗;サイエンス社)…
数値解析の主要な分野をほぼ網羅したコンパクトな教科書.理論的にもしっかりしており信頼がおける.初学者が1冊だけ買うならこれがお薦め.
- 『数値解析[第2版]』(森正武;共立出版)…
収録分野に若干偏りもあるが,物理出身の著者による丁寧かつ直感的な解説は(体質に合えば)非常に分かりやすい.
- 『数値計算の常識』(伊理正夫,藤野和建;共立出版)…
数値計算の幅広い分野にまたがり「注意」を与えた,名著中の名著.数値計算を使う研究をするならば一度読んで損はない.
- 『MATLAB/Scilab で理解する数値計算』(櫻井鉄也;東京大学出版会)…
MATLAB と Scilab の使い方を,数値計算を例題に紹介した書.MATLAB と Scilab の違いが丁寧に書いてある.ただしそれぞれのソフトウェアの仕様はあまり詳しく書いてないので,それぞれマニュアルを参照のこと.
[応用数学者向け]
- 『数値計算法の数理』(杉原正顯,室田一雄;岩波書店)…
微分方程式の数値解法,線形計算を除く幅広い数値解析テーマについて書かれた理論書.若干程度が高いが,応用数学を駆使する職業に就くなら,一冊持っておいて損はない.
[線形計算]
- 『線形計算の数理』(杉原・室田;岩波書店)…日本語だと最良.数理的側面に焦点が当てられており,やや程度が高い.
- “Matrix Computations”(Golub & Van Loan;Johns Hopkins)…実用・理論の両面に渡って最良.ただし分厚い(700頁弱)
- 『反復法 Templates』(朝倉書店) …反復法に限り,「とにかくこう使え」を書いた本.
- 『反復法の数理』(藤野・張;朝倉書店)…CG法関連を理論的に整理した数少ない和書.専門家向け.
[微分方程式]
- 『微分方程式の数値解法 I』(三井斌友;岩波応用数学講座)…
例によって分冊なので入手しづらいが図書館にはある.コンパクトにまとまった教科書.
- 『微分方程式による計算科学入門』(三井,小藤,齋藤;共立出版)…
常微分方程式の幅広いテーマを扱った教科書.各項目の説明は少なめだが,現時点で買える本の中では最良.
- ``Solving Ordinary Differential Equations I"(Hairer, N\o rsett, Wanner;Springer)…
常微分方程式の数値解法の世界的定番.続編の ``II" も出ている.これに載っていない話題は最早専門家に直接尋ねるしかない.
- 『偏微分方程式の数値シミュレーション(第2版)』(登坂宣好・大西和榮;東京大学出版会)…
種々の方程式に対し,差分法,有限要素法,および境界要素法の解法例を挙げた書.とにかく「どう使うか」を見るためには早い.
- 『微分方程式の数値解法 II』(田端正久;岩波応用数学講座)…
上の『〜I』の偏微分方程式版.代表的な3つの手法:差分法,有限要素法,および境界要素法が載っているが,主に数学的観点から書かれており,「数理」の部分に興味がある人向け.程度はやや高い.
[URL]
- Scilab
Scilab の使い方については,『MATLAB/Scilab で理解する数値計算』(櫻井鉄也,東京大学出版会)を薦めるが,ネット上にも入門解説サイトがいくつかある."scilab" で google を引いて色々探してみるとよい.次に,いくつか例を貼っておく.
SCILAB日本語ページ
Scilab入門(広島大 大野さん)
なお,2009/10/21時点でScilabの最新版は5.1.1だが,これは(高性能のPCでない限り)重くて使い物にならない模様.メジャーバージョンをひとつ落として,4.1.2(これがVersion4シリーズの最終版)を使うのが良いようです.
Version 4.1.2 のダウンロードはこちら(exeファイルへの直リンク)
4.1.2を含む古いバージョンのダウンロードはこちら(リストページへのリンク)
- netlib・・・LAPACK,BLAS などへの総合受付.ここの "Browse" を見ると,現在普及しているフリーライブラリがほとんど網羅されている.なお,このページの下の方の補遺(ライブラリについて)も参照のこと.
- LAPACK(このURLは Fortran77 用)・・・現在,最も普及している線形計算ライブラリ.
BLASと呼ばれる
行列・ベクトル基本演算パッケージを使うので,LAPACKを使うときはそちらもインストール(もしくは参照)することになる.
- CLAPACK(C言語用)・・・上のLAPACKをC言語に変換したもの.
- jlapack(Java版)なるものもある模様.
上の3つのライブラリは,使いたい関数(とそれが呼び出す関数)だけを抜き出してきて,自分のソースファイルに貼り付けて使えるので,初学者でも使えなくはない(決して「使いやすい」とは言えないが).Fortran90,Fortran95,C++,Java バージョンなどもあるが,これらは「外部ライブラリのリンク」という作業ができないと使えないので,初学者が使うのはとても難しい.
- 教育用計算機センターの端末に関する有用な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です.ただし,
- これらのライブラリを使うには,ライブラリで想定している形で行列やベクトルを定義する必要があること,さらに
- Fortran77とFortran90以降は少しフォーマットが変わっているので,これらのルーチンをFortran90以降で使うには,若干の変換が必要であること(→松尾まで相談してください)
に注意が必要です.自分が使いたい関数をどう呼び出せばいいかは,そのソースコードに丁寧に書いてあります.
C言語版のCLAPACKは,Fortran77版のLapackを機械的に変換して得られているため,使うためにもう少し手順が要ります.ここでは次の手順をお奨めします.
- Clapack のページからWindowsやUNIX系など,適当なアーカイブをダウンロードします.(欲しいのはソースコードなので,OSに関わりなく解凍しやすいものを選んでもいいかもしれません).そしてそのアーカイブを解凍してSRCフォルダを取り出します.この作業は一度だけやればOKです.
- 次に,上の要領でいったんFortran77版で欲しい関数を検索,ダウンロード(依存関係付き)して,自分がやりたい計算のために必要な関数のリストを得ます.
- 上で取り出しておいたSRCフォルダの中から必要な関数をかき集めて,自分のプログラムに貼り付けます.ただしヘッダファイルは,各関数の参照するものの和集合をプログラム全体の冒頭で宣言することになります.(と同時に,対応するヘッダファイルを用意する必要があります)
多分,これでOKだと思いますが,松尾は試していません.
試した猛者がいましたら,ぜひ情報を教えてください.
また,Java版のjlapackでも同じようなことができると思いますが,こちらも未確認です.手順は同様と思いますので割愛します.
★ グラフ描画ツール gnuplot
グラフを描け,という課題は,何でグラフを描いても構いませんが,いまから何かツールを手に入れたい人は,たとえば gnuplot というフリーソフトがプロの研究者も使う定番のグラフツールです.
gnuplot の説明は,たとえばWikipedia の gnuplot 説明ページを参照し,その中のリンクを適宜辿ってみてください.またいくつか初心者向けの本も出ています(書籍部を探してください).日本語による説明は,gnuplot tipsにもあります.
gnuplot は Windows を始めとする多くの OS 上で動きます.
Windows の人は,たぶん,gp422win32.zipをダウンロードすれば良いはずです.