応用数理学9 / 数理工学概論 / コンピュータ実験数学 (2020年度)

担当教員:宮武 勇登
メールでの連絡は miyatake (あっと) cas.cmc.osaka-u.ac.jp まで.

水曜2限 理/B202 教室

お知らせ

講義ノート(2020年7月21日版)

このページは,講義の進展に応じて順次更新します.たとえば,参考にした書籍・文献などはこのページでお知らせします.また,補足資料なども(CLEにアップロードする可能性もありますが)順次公開します.

この講義では,プログラミングによる実習を行いません.しかし,各自のラップトップPCなどでプログラミングに取り組むことを強く推奨します.また,そのための(最低限必要な)情報をこのページで提供します.

レポート

レポートは,6月末頃にこのウェブページかCLEにアップロードします.締切は7月末頃の予定です.
ソースファイルを除いて一つのPDFで提出してください.基本的にはLaTeXを使ってレポートを書くことを推奨します.インストール方法については

などが参考になります.数値計算結果の図を貼り付ける場合は以下の点に注意してください.

  • 縦軸,横軸,凡例などを図中に書く.また,文字・数字は読める大きさで書く.
  • 二つの図を比較する場合などは,両者のスケール(例えば縦軸や横軸の数字の範囲)が揃うように調整する.
  • PDFやepsなどベクトル画像を使う.
  • 余力があれば,PGF/TikZを使う.webで検索するとたくさん例がでてきます(たとえばここ).

参考書籍・文献

数値解析全般

  • 「数値解析入門[増訂版]」(山本哲朗;サイエンス社)
  • 「数値解析入門」(齊藤宣一;東大出版会)

数値解析(特に数値線形代数)

  • 「線形計算の数理」(室田一雄,杉原正顯;岩波書店)

数値解析(特に常微分方程式の数値解法)

  • 「常微分方程式の数値解法」(三井斌友:岩波書店)

計算機環境の例

  • MATLAB:プロの数値解析学者もよく使っている数値計算専用言語(ソフトウェア).様々な数値計算手法がすでに実装されており,あまり苦労せず直感的にプログラムを書ける.ただし,有料(学割あり).また,非常に基本的な数値計算を除いて,多くの数値計算手法を利用するにはツールボックスが必要(有料).MATLABは教育用計算機で利用できるが,ほとんどのツールボックスは使えない.非常に簡単にプログラミングできる反面,メモリと速度の両面で大規模問題には向かない.
  • Octave:無料の数値計算専用言語.MATLABとほぼ互換であり,MATLABではツールボックスが必要だがOctaveでは標準で実装されている数値計算手法も多い.Webや書籍などで情報もある程度充実している.公式の解説文書も大いに勉強になる.同様の無料の言語にScilabがあるが,個人的な印象ではOctaveの方がMATLABとの互換性が高い.なお,速度に関してOctaveやScilabはMATLABよりも遅い(ことが多い).
  • Python:一般のプログラミング言語.数値計算にはnumpyが必要.C言語やFortranと比べると,MATLABに近く,直感的にプログラムを書ける.いまや,機械学習方面では主力だが,(回避策もいくつか知られているが)速度の面ではMATLABと同様の問題がある.
  • Julia:比較的新しい数値計算専用言語.MATLABに近く,直感的にプログラムを書けるだけでなく,計算速度はC言語やFortranに匹敵する.グラフィックスの整備がまだ十分ではない印象があるが,ここ数年でユーザー数も大きく伸びている.この講義では基本的にJuliaのサンプルプログラムを提供する.なお,MATLAB,Python, Juliaはよく似た感覚でプログラムを書けるが,細かい違いも少なくない.MATLAB–Python–Julia cheatsheet には違いがよくまとまっている.
    MATLABのツールボックスと同様に,様々な数値計算手法やグラフィックスを使うためには必要なパッケージをインストールする必要がある.
    降籏先生による昨年度の本講義(応用数理学9)はJuliaを用いて数値計算を学ぶ内容でした.降籏先生の講義のwebページも参考になります.
  • C言語,Fortran:コンパイル型のプログラミング言語.上述の言語に比べて長い歴史がある.一方で,上述の言語に比べて初学者が習得するためのコストは大きくなる傾向がある.しかしながら,スーパーコンピュータなどを使った最先端の大規模計算では現代でも主力の言語.

行列の例

  • Matrix Market, SuiteSparse Matrix Collection:様々な応用分野の行列のアーカイブ.「対称」,「正定値」など行列の属性を指定して検索できる.Juliaを使う場合,matrix marketの形式(拡張子は.mtx)で保存するとよい.
  • MATLABのテスト行列:MATLABを使う場合は,いくつかのテスト行列が準備されている.これらを保存して,JuliaやPythonで呼び出すことも可能.

JuliaのTips

宮武のwebページにもいくつかの備忘録があります.特に参照渡しについては注意が必要.

パッケージのインストール・使い方

例えばグラフを描くパッケージの一つであるPlotsをインストールするためには

(v1.3) pkg> add Plots

とすればよい.また,このパッケージを使うためには

using Plots

とすればよい.

疎行列

講義でもふれますが,応用上あらわれる行列の大半が疎行列(ほとんどの要素が0)です.従って,行列積や行列ベクトル積を計算する際に,定義どおりに計算すると,0を掛けたり足したりする操作により大きな無駄が生じます.そこで,SparseArraysというパッケージを利用します.

Juliaでmtxファイルの呼び出し

MatrixMarketというパッケージが必要.使い方は

M = MatrixMarket.mmread("filename.mtx")