Numerical Simulation Methods
事前作業と案内
演習は、pythonの開発環境のひとつであるjupyter notebookを利用するので、各自のコンピュータに利用環境を整備してください。
インストール方法はWeb上にたくさんあるが
https://ai-inter1.com/jupyter-notebook/
あたりが簡単で良いと思う。
できない人は、この授業用の情報処理教室(第2実習室か第3実習室で行ってください。)
- この講義のmoodleページは
https://moodle.yamanashi.ac.jp/2020/course/view.php?id=2312
です。このページとmoodleのページを行ったり来たりしますので、両方をWebブラウザの別タブか別ウィンドウで開いておくのが便利でしょう。
- オンライン授業・演習を行います。zoomのURLは上記moodleのページにあります。
授業内容(新)
7月1日(第1週)
7月 8日(第2週)
pythonの基本
変数:リスト(≒1次元配列), 辞書(キーと値のセット)
1行1命令、命令の終わりは改行コード (";"ではない)
制御構造:繰り返し、条件分岐
ブロックは { } ではなく、行のインデントで表す
などを理解したことを前提に以下を説明する。それがまだの人は、実習時間に"pythonの基本"あるはそれに類するWeb上の教材などで勉強から始めてもよい。
関数近似(回帰分析)を例に 教材はこちら (演習課題を含みます)授業時の書き込みを残したもの
scikit-learnに含まれるLinearRegressionを利用して、非線形(多項式)近似ができるようになる
重回帰分析での利用 を踏まえ、LinearRegressionで非線形回帰を行えることを理解する
7月15日(第3週)
文中に引用文献としてPRMLとあるのは「パターン認識と機械学習」 ("Pattern Recognition and Machine Learning" , C.M. ビショップ)のことを指す。(原著は全文のPDFがリンク先のページから入手できる。)
データの関数近似の改良(正則化)関数近似(2)
多項式近似を例に過学習とはどのようなことかを理解する
リッジ(ridge)回帰やラッソ(Lasso)回帰によって過学習を抑えることができることを理解する
上記の実習によゆうがあれば、
データ分析ライブラリpandasの初歩的な扱い (オプション)
関数近似(3)
データのばらつきに対する見方について (ベイズ的な扱いに向けて)
7月22日(第4週)
7月29日(第5週)
8月 5日(第6週)
- その他の機械学習の方法と検証
ニューラルネット
ランダムフォレスト
ハイパーパラメータの選び方 (口頭説明のみ)
モデルの妥当性の検定
- 6週までのまとめ
8月26日(第7週)
「6週までのまとめ 」(下記の枠中)を踏まえ、自然科学、工学におけるもう一つの数値計算分野である「数値シミュレーション」について、概説する。
微分方程式で表される系の時間発展方程式の数値解について
(昨年度までの講義内容の概要説明)
- 調和振動子の方程式を例に、数値積分の基本的なアルゴリズムと誤差の発生について実習
テキスト1 ipynbファイル
オイラー法、ホイン法、ルンゲクッタ法
scipyの常微分方程式の数値積分モジュールの利用 (2020年度版 はここだけを説明)
パラメータをセットするjupyterのインラインGUI:
- 解析的には解けない微分方程式の例
テキスト2 ipynbファイル
ローレンツ方程式と解のストレンジ・アトラクタ
軌跡の3次元プロット
リアルタイムアニメーションの描画例
(アニメーションのmp4形式ファイルへの出力)
- 数値モデルの例
非線形振動子のテキスト ipynbファイル
結合非線形振動子
GUIの例(tkinterモジュールの利用)
tkinterは、python ver2.7まではTkinterという名であった。昨年まで情報処理教室のpythonがver2.7だったため、プログラムが"Tkinter'になっているところがあるかもしれないので、あったら直して実行してみてほしい。
- 数値モデルの例2
パターンダイナミクスのテキスト ipynbファイル
偏微分方程式の例
酸化還元反応におけるリズムとパターンの出現 (BZ反応)
2次元パターンの時間変化アニメーション表示
行列計算(2次元配列の演算)を例に、pythonを用いた繰り返し計算の高速化について理解する
行列計算の高速化のテキスト ipynbファイル
授業アンケートは9月3日ころまでに回答してください。(この授業固有の期限は設けません。独自の質問項目はありません。忘れないように早めに。)
(第8週)
- 総合演習(レポート作成)
データの回帰分析に関する機械学習の手法について、理解したこと、試したことをレポートする。
上記の授業テキスト(html)やjupyter notebookファイルにあるプログラム例はそのまま利用して良い。
テキスト中に書いた「演習」をもとに、色々試したことをレポートすることなどを想定している。
各自の研究・演習でつかっているデータに適用してみたというのも、もちろん、OK。
python言語を使うのが初めてだった人は、その文法や使い方について勉強したレポートも含めてよい。
(たとえば、テキストのプログラム例を読み解く際に必要だった基礎知識のメモなど)
7週目に紹介した微分方程式の数値計算に関する題材を独習してレポートするのでもよい。
【大事なこと】 どこかのプログラムや解説を参考にしたときは、必ず引用元(情報源)を明示すること!Web上のプログラム例などをそのまま自分で作ったかのように載せたことが判明した場合は大きな減点となる。
- 提出は、jupyter notebook(ipynb)形式か、pdf、あるいはhtml形式でmoodleのページへアップロード (Microsoft Wordなどで作成した場合は、pdfに変換してください。)
- 締め切り: 9月3日(木)23時
従来の計画
(シラバスの通りのものです。興味があれば自習に役立ててください。)
(2019年度 第1週)
(2019年度 第2週)
時間刻み(time step, 数式の中では$h$と表記)などを変えて実行してみる。
pythonが初めての人は、適当な解説Webページをみつけ、それを頼りにコードを読むことからはじめよう。
余裕があれば演習問題(van del Pol方程式の数値解の描画)を行ってみる。
8回終了後に、やったことをjupyter notebookファイル(あるいはコード付きpdf文書)として提出してもらうので、自分用のnotebookを使って、やったことをメモしていく。(pythonの文法メモなどを含んでいてもよい。)
何を参照しても良いが、参照したもののありか(書籍、Webページ(URLだけではなく誰が書いたものかも)など)を明示すること。
(2019年度 第3週)
(前回の継続) 微分方程式の数値計算アルゴリズムをpythonスクリプト例で理解し、scipyの関数odeintを使えるようにする。(ねらい:マニュアルの読みこなしとpython, scipyの利用練習)
演習問題(Exercise 1)として「van del Pol方程式の数値解の描画」を行ってみる。(ねらい:pythonを用いた描画練習)
(参考) JavaScriptを使ってWebブラウザ内で軌跡を描いた例
inline GUIとmatplotlibを用いた描画の手法について紹介する。
tips
notebook上ではスクリプト実行の出力(matplotlibを利用した描画)も描かれている。これをクリアするには、下図のようにCellメニューの中の"Clear"を選択する。
ショートカットキーは、セル編集中(セルの中にカーソルが点滅している:「編集モード」)場合と、セルの制御状態(カーソルが見えてない「コマンドモード」)とで異なることを知っておこう。一覧はHelpメニューから"Keyboard Shortcuts"を選択すると表示される。
コマンドモードでの操作のほとんどは上部の"Edit"メニューで行えるので知らなくてもそれほど問題ない。
編集モードについては、取り消し(undo)がCtrl-zであるくらいを知っておこう。
(2019年度 第4週)
(2019年度 第5週)
自主学習
中間報告をe-Learningのページへ提出 【締切 7/13(土)】
実践的な例として、
Numerical Methods 1にあるvan del Pol方程式の数値解表示(Exercise 1)
Numerical Methods 2にあるExercise 2-1, 2-2かそれに類似した計算・表示プログラムをつくってみる
pythonに慣れてない人は、pythonの基礎的な学習記録やそれぞれのページにあるコード例を読み解く努力をしたなどの記録でもよい
pythonではなく、matlab, scilab, octaveなど他のツール(言語)での実践例でもよい。(その場合、レポートはpdf, htmlなど標準的に閲覧できる形式で。)
Web上の情報を含め、何を参考に学習、プログラム作成を行っても良いが、本教材以外のものを参考にした場合は、引用をきちんと行うこと。無断引用は強いマイナスポイントとなる。(適切な引用についてはプラス点)
<class name="f_red">以下は、予定。(データサイエンス関連の内容にする可能性あり)
(2019年度 第6週)
(参考: 今年は、前項を重視し、以下は参考とします。)
(2019年度 第7週)
(参考)
アニメーションをmpeg4やmoving gif形式に変換するソフトが入ってれば、ブラウザの中で表示することもできる。(教室のコンピュータには無いが、各自のコンピュータにffmpegなどの変換ソフトをインストールして試してみてほしい。)
inlineAnimation.ipynb
(2019年度 第8週)
総合演習(レポート作成)
中間レポートに加え、各自の興味に応じて次の項目のいずれかに関するノートを作ってください。(1つで結構です。)
配列に関する演算(6週におこなったもの)及び高速化についてまとめる。
インラインGUIの利用方法についてまとめる。
数値計算アニメーションの作成をいろいろ試してみる。
画像・動画ファイルをノートブックファイルに埋め込んだ場合は、ipynbファイルと画像等ファイルを含めてzip等で圧縮してアップロードしてください。
中間レポートの内容も含めてください。
締め切り: 8月31日
(参考)
Q & A (古いです。)
I. Introduction
[note]
jupyter notebookファイルをダウンロードするときには、IEではなく、ChromeかFirefoxを使ってください。
If you use Internet Explorer (IE), you would fail to download jupyer notebook files (*.ipynb
). IE recognizes them as an unknown file type and so add some html modifiers to the html files when it saves them. So, I recommend you to use other Web browsers such as Firefox and Chrome.
II. Numerical Methods
1.Numerical Methods 1: Introduction
Online text , jupyter notebook (ipynb) (last update date: 2019-06-26)
Numerical methods for solving ordinary differential equations (ODE)
2. Numerical Methods 2: Analysis of Chaotic Behavior of ODE
Online text jupyter notebook (ipynb) (last update date: 2019-06-29)
3. Mathematical modeling and Analysis: cooperative phenomena in dynamical systems
Online text , jupyter notebook
4. Modeling 2 (Reaction-diffusion system as a model described by partial differential equations)
Online text , jupyter notebook
Appendix
Simulation for Stochastic Models
Percolation and Aggregation as a geometrically random system
Monte-Carlo Simulation of Thermal Systems
References