応用数理シミュレーション演習

科目名
Course Title
授業コード 単位数 配当年次 開講期間
Term
科目分類 ナンバリング
コード
曜日
コマ
教室 担当教員氏名
Instructor
応用数理シミュレーション演習
Exercise in Applied Mathematical Simulation
B303950001 2 3 前期授業 専門科目 CSMAT3329-J2 水5 オンライン(中百舌鳥キャンパス) 田畑 稔

オフィスアワー

メイルで随時質問を受け付けます

授業目標

映像教材を観たり掲載資料を読んで貰う形の非同期オンライン形式で進めます.通常の講義形式ではありませんので、注意してください.まず授業支援システムに行ってください.

自然現象や社会現象の定量的な側面を分析することにより、現象を記述する数理モデルを構築し、数理解析的手法や数値解析的手法を用いてモデルを調べ、現象に対して数学的なアプローチを行う基本的なシミュレーション技法を学ぶ。特に、最も単純なエージェント・ベースド・モデルであるsugarscape modelの基礎理論を通して、離散力学系を用いたシミュレーション技法の基礎を学び、同手法の応用として、数理疫学モデルを取り上げ、具体的なエージェント・ベースド・モデルの性質を理解する。講義計画に示されている教材を通じて以下の3つを達成することが目標である。

1.C言語を使って数値計算プログラムが書けるようになる。
2.C言語を使ってアルゴリズムが実装できる。
3.各講義で提示する計算機シミュレーション技法をマスターして自分でシミュレーションができるようにする。

教科書

HPからのダウンロード資料を利用する.
プログラムはWindows 版 Visual C++ に対応しています.自宅でプログラムを走らせる場合はVisual Studio Community をインストールしてください.Xcodeには対応していませんので注意してください.

参考書

講義中に指示する

授業時間外の学習(準備学習等について)

講義中に指示する課題をやってくる

授業の概要

映像教材を観たり掲載資料を読んで貰う形の非同期オンライン形式で進めます.通常の講義形式ではありませんので、注意してください.まず授業支援システムに行ってください.

数値解析学で学んだ数値計算アルゴリズムを、計算機に実装する方法を演習を通して学ぶ。特に常微分方程式の近似解法のアルゴリズムを実際に計算機に実装する方法を学び、それを用いて数理伝染病学の微分方程式の数値シミュレーションを行い、伝染病の感染拡大現象を理解する。また、エージェント・ベースド・モデルを使って閉鎖村落における感染率の高い感染症がどのように村落に広がっていくのかをシミュレートすることにより、応用数理シミュレーションで学んだ離散力学系に関するシミュレーション技法を、具体的な問題を通して、深く理解する。

授業計画

第1回 第1講.講義全体の内容紹介と統合開発環境C++.NET の使い方の説明
数理モデリングとはどういう学問なのかを簡単に紹介します.その後で,Microsoft Visual C++.NET の使い方を勉強します.所詮数値解析のCのプログラムを組むだけなので,この統合開発環境の能力の1割も使いません.それでもこのソフトの能力の高さは実感できると思います.高性能なソフトを自由に使えることに感謝して大いに活用してください.
準備学習等 講義中に指示する課題をやってくる
第2回 第2講.C言語の復習
C言語は一通り知っていると思いますが,学習に使った参考書や教科書は持参するようにしましょう.メインプログラムを関数を使って見通し良くする技術の修得に重点を置きたいと思います.関数のプロトタイプ宣言,関数の定義の仕方を勉強してくるようにしましょう.また出力は原則ファイルへの出力に統一したいと思います.ファイルの取り扱い方法も復習してください.
準備学習等 講義中に指示する課題をやってくる
第3回 第3講.数列を表示しよう,数列の極限を求めよう.
定義式がはっきりしている数列や簡単な漸化式で表される数式をファイル出力するプログラムを組んでみましょう.打ち出された数列をExcelで取り出して表示してみましょう.微分積分で収束することを習った数列が実際にどのように収束しているのか計算機を使って検証してみましょう.また2変数の関数の3DグラフをExcelで描くための出力プログラムを学習しましょう.
準備学習等 講義中に指示する課題をやってくる
第4回 第4講.級数の和を求めよう.
3の講義でいろいろな数列を様々な方法を用いて定義してきました.ここではその数列の和を求めるプログラムを組んでみましょう.1次元配列を渡してその数列の和を受けとる関数を定義できるようになりましょう.
準備学習等 講義中に指示する課題をやってくる
第5回 第5講.級数の和で表現される関数のグラフを描いてみよう.
指数関数や三角関数のマクローリン展開を微分積分で習っていると思いますが,これらの展開を有限項で切った多項式のグラフを描いてみましょう.これらのマクローリン展開の一般項は ∞/∞ の不定形をしています.これらの級数を求めるときには少し工夫が必要です.この工夫について勉強しましょう.
準備学習等 講義中に指示する課題をやってくる
第6回 第6講.常微分方程式の数値解の初等的な方法を勉強します.
後の講義でルンゲ・クッタ法を使って精度の高い数値解を求めるのですが,ここでは解の意味を理解しやすい(プログラムを組みやすすく読んで意味が理解しやすい)オイラー法を使って簡単な微分方程式の初期値問題の数値解を求めることを勉強します.またパラメーターをいろいろ変化させると解の挙動がどのように変化するかを logistic equation を中心にして学習します.またここでは複数のファイルを同時に扱う方法も学習します.ファイルの取り扱いを今一度復習しておいてください.
準備学習等 講義中に指示する課題をやってくる
第7回 中間試験 準備学習等 講義中に指示する課題をやってくる
第8回 第7講.数理伝染病学の微分方程式の数値解析.
あまり簡単な常微分方程式ばかりを扱っていると数値解法のありがたみが理解できないと思いますので,ここでは数理伝染病学の基本方程式であるケルマック・マッケンドリック方程式の数値解を求めて,数理伝染病学とはどんな学問なのか,何が分かるのかをトピックス的に紹介したいと思います.つまらないプログラミングに飽きてきた諸君らの興味を引くことができたら良いなと思います.ケルマック・マッケンドリック方程式の数値解がパラメーター(死亡率,感染率等)が変化したとき,どのように変化するかを観察するプログラムを考えます.グラフをExcelで描いて死亡率と総感染者数の関係を理解します.また複数のファイルを同時に作って感染者数,非感染者数,死亡者数をそれぞれ別のファイルに打ち出すテクニックも勉強しましょう.
準備学習等 講義中に指示する課題をやってくる
第9回 第8講.数理伝染病学の微分方程式の数値解析の続き.深刻な(致死率の高い)感染症(例えばエボラ出血熱)の感染爆発は人類にとって脅威ですが,その感染症の感染率が低ければ決して感染爆発は起きない(起きる可能性が極めて小さい)ことをケルマック・マッケンドリック方程式を元にして説明します.またエージェント・ベースド・モデルを使って閉鎖村落における感染率の高い感染症がどのように村落に広がっていくのかをシミュレートします.実際にモデルを走らせてみると,ヒトからヒトへの感染も確かに起きるのですが,それよりも院内感染が感染拡大に大きな役割を果たしていることが分かります. 準備学習等 講義中に指示する課題をやってくる
第10回 第9講.正確な数値積分の求め方.
数値積分公式の実装を学習します.すでに一次元配列の総和を求めるプログラムは組んでいますので,比較的簡単に数値積分をするプログラムを組むことが出来ると思います.同様に一次元配列や二次元配列を渡して積分を受け取る関数を設計しましょう.これも数列を渡して総和を受け取る関数を設計した経験がありますので,難しくはないでしょう.シンプソンの公式を使って精度を上げたプログラムも紹介したいと思います.講義前にシンプソンの公式の導き方を復習しておいてください.
準備学習等 講義中に指示する課題をやってくる
第11回 第10講.ルンゲ・クッタ法.
ルンゲ・クッタ法を用いて常微分方程式の精度の高い近似解を求めよう.今まではプログラムの見やすさを優先してオイラー法を使って常微分方程式の解を求めてきた.ここではルンゲ・クッタ法を用いてより精度の高い解を求める.今までオイラー法を用いて書いてきた常微分方程式の近似解を求めるプログラムをルンゲ・クッタ法を用いて全部書き直してみましょう.ルンゲ・クッタ法のアルゴリズムを関数として組み込んでしまえば,オイラー法で作ったプログラムをそのまま上手く流用できます.最後にオイラー法とルンゲ・クッタ法の精度を厳密解が求まる変数分離形の常微分方程式で比較してみましょう.数万回 for の構文をくぐらせたら,どれくらい近似解が真の解から離れるのかを評価するプログラムを組んでみましょう.なお,講義前にルンゲ・クッタ法を復習しておくのを忘れないようにしてください.
準備学習等 講義中に指示する課題をやってくる
第12回 第11講.関数をフーリエ級数展開してみよう.
この単元を学習する前に,フーリエ級数展開の基本を復習します.フーリエ級数展開は「関数の積を1次元配列に並べる」「展開される関数と三角関数の積を表す1次元配列を渡してその積分を受け取る関数を設計する」そして「級数の和を求める」がちゃんと分かっていないと出来ません.今まで組んできたプログラムの中でもっとも長いプログラムです.実際に幾つかの関数をフーリエ級数展開してフーリエ級数展開がどんな展開なのか,特に不連続点近傍ではどんな展開なっているのか学習します.所謂ギッブス現象をグラフで理解しましょう.できれば講義の後でフーリエ級数展開の証明を復習してください.
準備学習等 講義中に指示する課題をやってくる
第13回 第12講.偏微分方程式(熱伝導方程式)の数値解.
周期的境界条件を持つ1次元熱伝導方程式についての混合問題の解を数値解析的に求める方法を説明します.解をフーリエ級数展開して有限項で打ち切るという方法を用います.初等的かつ計算量が無意味に多い方法ですが,意味は理解しやすく一度はフーリエ級数展開で表示された解がどのようなものかを理解する上で重要な方法です.同様に周期的境界条件を持つ1次元波動方程式についての混合問題の解を数値解析的に求める方法を説明します.
準備学習等 講義中に指示する課題をやってくる
第14回 第13講.有限要素法.
前の講義では数値解析的には馬鹿げた方法で解を求めましたが,この講では有限要素法を用いて周期的境界条件を持つ1次元熱伝導方程式の解を求める計算をします.この講義は数値解析の講義では無いので十分な時間が取れないので,概論的な講義になると思います.
準備学習等 講義中に指示する課題をやってくる
第15回 定期試験 準備学習等 講義中に指示する課題をやってくる

成績評価

授業目標(達成目標)の1~6の達成度で成績評価を行う。
C(合格)となるためには1~6のすべての項目で基本的な問題(教科書の例題レベル)が途中経過(式変形)も含めて正しく解けることが必要である。(ただし、軽微な計算ミスは除く。)
成績評価は、課題提出により合計100点満点で評価する。C(合格)となるためには60点以上が必要である。