Upgrade to Pro — share decks privately, control downloads, hide ads and more …

数値シミュレーションとは / Simulation 01

数値シミュレーションとは / Simulation 01

シミュレーション工学

kaityo256

April 10, 2023
Tweet

More Decks by kaityo256

Other Decks in Education

Transcript

  1. 3 3 51 • コンピュータを使った計算で科学を研究する手法 →計算科学 • コンピュータの計算能力の向上により、ますます その重要性が増している •

    数値計算には様々な分野があるが、中でも重要な のが数値シミュレーション 数値シミュレーションとはなにか? 数値シミュレーションとはどのようなものか? 数値シミュレーションにより何がわかるか?
  2. 4 4 51 予め定めたルールに従う系の振る舞いを再現、 予想すること 例:フライトシミュレータ • 計器や操縦桿が実機と同じ場所にあり、同じ感覚で 操縦できる •

    悪天候での飛行訓練や、エンジン停止など、実機で の再現が困難、もしくは危険なシチュエーションを 再現できる
  3. 7 7 51 金利15% 毎月の支払額が1万円 10万円の借金をした場合 金利手数料 = 10万円 *

    1.25% = 1250円 金利 残高 ※ 金利は日割り計算だが、簡単のため年率の1/12とする 初回の支払い金額 = 10000円 = 1250円 + 8750円 金利手数料 残高返済
  4. 8 8 51 金利15% 毎月の支払額が1万円 10万円の借金をした場合 初回の支払い金額 = 10000円 =

    1250円 + 8750円 金利手数料 残高返済 二回目の支払い金額 = 10000円 = 1140円 + 8860円 三回目の支払い金額 = 10000円 = 1029円 + 8971円 十一回目の支払い金額 = 7497円 = 92円 + 7405円 ・・・ 11回払い:支払総額 10万7497円
  5. 11 11 51 何が起きた? 10万円の借り入れ 元本返済 金利手数料 79万円の借り入れ 元本返済 金利手数料

    借入額が増えると、返済額のほとんどを金利手数料が占めるようになる 借り入れが80万円の時、金利手数料が支払額に一致→元本が減らなくなる ※ 返済額により借入額の上限は制限されているが、上限が緩和されるとこれが起きる
  6. 13 13 51 金利15% 毎月の支払額が1万円 ルール 帰結 残高が80万円を超えたら破綻 • ルールからの帰結は「言われて見ればそうだな」と思う

    ことが多い • しかし、やってみる前にはわからないことが多い • →だからこそやってみる価値がある 非自明な結果は、わかってしまえばすべて自明
  7. 16 16 51 お互いに通行可能なサイトをまとめたものを クラスターと呼ぶ • クラスターとは「何かの影響 が及ぶ範囲」のこと • 通行確率pが大きいほど、クラ

    スターは大きくなる 山火事の場合 パラメータ:木々の乾燥度合、木々の集合度合 クラスター:どこかに火がついたら燃え広がる範囲 感染症の場合 パラメータ:人々の交流具合、病気の感染力 クラスター:誰かに感染したら、収束するまでに感染が広がる範囲
  8. 22 22 51 1957年 スティーブンス工科大学における議論 G. E. Uhlenbeckが「剛体球系に相転移はあるか?」について聴衆に挙手を求める 昨年の秋、シアトルの統計力学の会議で似たような議論があり、私は投票で 議論を締めました。投票は単純に参加者が剛体粒子系に相転移があるかない

    かを問うものでした。シアトルでは、投票結果はまったくの半々でした。さ て今回はKirkwood氏もいらっしゃることですし、ちょっと偏った結果になる かもしれませんが、とりあえず相転移があると思う方、手を上げていただけ ませんか?・・・次は相転移がないと思う方?・・・はい、また半々ですね。 G. E. Uhlenbeck: 電子スピンの発見者。Ornstein–Uhlenbeck過程などで有名。 J. G. Kirkwood: Kirkwood-Buff理論やBBGKY階層等で有名。Alderの当時のボス B. J. Alder: Kirkwoodのもとで剛体球相転移を研究中 1950年代、「剛体球系に相転移はあるか」について長らく問題になっていた 様々な理論が提案されるが、解決にいたらず 背景
  9. 23 23 51 Alderは、世界初となる分子動力学法を開発、計算していた (※) しかし、Woodらによるモンテカルロ法による計算結果との不一致に悩んでいた → 後に緩和不足と判明。ついにモンテカルロ法と結果が一致する ※ プログラムを書いたのは別の女性

    W. W. Wood, and J. D. Jacobson, J. Chem. Phys. 27, 1207 (1957). B. J. Alder, and T. E. Wainwright, J. Chem. Phys. 27, 1208 (1957). MCの論文 MDの論文 剛体球系に相転移があることが数値計算により明白に示された MCとMDの結果は二つの論文に結実する
  10. 25 25 51 数値シミュレーションとはなにか? • 計算機の中に「小さな世界」を作り、現象の再現、予測を行うこと 数値シミュレーションとはどのようなものか? • 世の中を構成するすべてのルールを考え(モデル化) •

    プログラムとして言語化し(実装) • ルールに従って系を「再現する」営みのこと(実行) 数値シミュレーションにより何がわかるのか? • 与えたルール「以上」のことがわかることがある • 「全知」であるプログラマにも、その結果は予想できない • 「言われてみれば」と思う「結果」もあるし、結果を見てもなお 信じられない「結果」もある
  11. 33 33 51 微分を差分で近似すること(離散化の一種) 𝑓 𝑥 + ℎ = 𝑓

    𝑥 + ℎ𝑓′ 𝑥 + 𝑂 ℎ2 テイラー展開を一次まで考える 二次以上を無視する 𝑑𝑓 𝑑𝑥 ≈ 𝑓 𝑥 + ℎ − 𝑓(𝑥) ℎ 𝑓′ 𝑥 について解く 微分が差分で近似された
  12. 34 34 51 O Time t 𝑓(𝑡) 𝑑𝑓 𝑑𝑡 𝑑𝑓

    𝑑𝑡 時刻tにおける傾き O Time t 𝑓(𝑡) 𝑑𝑓 𝑑𝑡 ≈ 𝑓 𝑡+𝑑𝑡 −𝑓(𝑡) 𝑑𝑡 t+dt 時間変化=現在と少し未来の差
  13. 35 35 51 𝜕𝑇 𝜕𝑡 = −𝜅 𝜕2𝑇 𝜕𝑥2 ある場所の時間変化量は

    まわりの平均との差をへらそうとする この地点での次のステップでの値を 周りの値をみて決める 上記の操作をすべての地点について繰り返すと 次のステップ(少し未来)での「世界」がわかる 「ステップ」を繰り返せば、遠い未来の世界がわかる
  14. 36 36 51 𝑑𝑥 𝑑𝑡 = 𝑣 時間だけ離散化し、 位置や速度は連続 𝑥

    𝑡 + ℎ = 𝑥 𝑡 + 𝑣ℎ 物体の運動を追う場合 𝜕𝑇 𝜕𝑡 = −𝜅 𝑑2𝑇 𝑑𝑥2 𝑇𝑥,𝑡+ℎ = 𝑇𝑥,𝑡 + 𝑇𝑥+1,𝑡 − 2𝑇𝑥,𝑡 + 𝑇𝑥−1,𝑡 ℎ 時間と空間をともに 離散化 場の量の時間発展を追う場合
  15. 37 37 51 • 微分方程式を数値的に解くには、なんらかの離散化 を伴う • 離散化には、時間の離散化と空間の離散化がある • 物体の運動を追う場合は時間のみを離散化する

    • 場の量の時間発展を追う場合は空間、時間ともに離 散化する ※ここでは離散化の手段として差分化を取り上げたが、他にも様々な離散化手法がある
  16. 39 39 51 無重力空間における物体の運動 Pythonコード例 h = 0.1 T =

    10 x = 0.0 v = 1.0 steps = int(T/h) for i in range(steps): x += v * h t = i * h print(f"{t} {x}") 実行結果 0.0 0.1 0.1 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.6 0.7 0.7 0.8 ... 𝑑𝑥 𝑑𝑡 = 𝑣
  17. 41 41 51 時間の単位をsec、距離の単位をメートルと決める →「秒速1メートルの物体の運動」 時間の単位をhour、距離の単位をキロメートルと決める →「時速1キロメートルの物体の運動」 0.0 0.1 0.1

    0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.6 0.7 0.7 0.8 ... 実行結果 秒速1メートルの等速直線運動と、時速1キロメートルの等速直線運動、 現象としては全く異なる運動であるのに、同じ方程式の解であるから、 同じ振る舞いに見える ある現象のスケールを変更した時に、別の現象と同じように見えることを スケーリングと呼ぶ
  18. 42 42 51 一次元のバネモデルを考える(摩擦は無視) 𝑚 𝑑𝑣 𝑑𝑡 = −𝑘𝑥 𝑑𝑥

    𝑑𝑡 = 𝑣 h = 0.1 T = 10 x = 0.0 k = 1.0 m = 1.0 v = 1.0 steps = int(T/h) for i in range(steps): v -= k * x / m * h x += v * h t = i * h print(f"{t} {x}") コードに落とすと こんな感じ→
  19. 43 43 51 実行結果 0.0 0.1 0.1 0.199 0.2 0.29601

    0.30000000000000004 0.3900599 0.4 0.48020920100000003 0.5 0.56555640999 0.6000000000000001 0.6452480548801001 0.7000000000000001 0.718487219221399 0.8 0.784541511370484 0.9 0.8427503884058641 1.0 0.8925317615571856 1.1 0.9333878170929353 1.2000000000000002 0.9649099944577556 1.3 0.9867830718779984 1.4000000000000001 0.9987883185794612 ... グラフ化したもの 振幅1.0、周期6.28の単振動を表現している
  20. 45 45 51 質量をキログラム、時間は1秒、長さを1メートルで測る 𝑚 𝑑𝑣 𝑑𝑡 = −𝑘𝑥 この方程式に表れるすべての量は次元を持っている

    単位あたりの量を用いて無次元化する 𝑡0 = 1[𝑠] 𝑙0 = 1[𝑚] 𝑚0 = 1[𝑘𝑔] ǁ 𝑡 = 𝑡/𝑡0 ෤ 𝑥 = 𝑥/𝑙0 ෥ 𝑚 = 𝑚/𝑚0 ෤ 𝑣 = 𝑡0 𝑙0 𝑣 基準となる量 無次元化した変数
  21. 46 46 51 𝑚 𝑑𝑣 𝑑𝑡 = −𝑘𝑥 ෥ 𝑚

    𝑑 ෤ 𝑣 𝑑 ǁ 𝑡 = − 𝑡0 2 𝑚0 𝑘 ෤ 𝑥 無次元量で書き直す ෨ 𝑘 = 𝑡0 2 𝑚0 𝑘 として無次元化されたバネ定数を導入する ෥ 𝑚 𝑑 ෤ 𝑣 𝑑 ǁ 𝑡 = −෨ 𝑘 ෤ 𝑥 方程式の形がもとに戻った
  22. 47 47 51 h = 0.1 T = 10 x

    = 0.0 k = 1.0 m = 1.0 v = 1.0 steps = int(T/h) for i in range(steps): v -= x * h x += v * h t = i * h print(f"{t} {x}") 数値計算は、無次元化した方程式を解いていると約束する ෥ 𝑚 𝑑 ෤ 𝑣 𝑑 ǁ 𝑡 = −෨ 𝑘 ෤ 𝑥 𝑚 𝑑𝑣 𝑑𝑡 = −𝑘𝑥 ではなく を解いてる 気持ち
  23. 48 48 51 実行結果 0.0 0.1 0.1 0.199 0.2 0.29601

    ... 結果として出力される数値は 無次元化された量 ǁ 𝑡 = 𝑡/𝑡0 ෤ 𝑥 = 𝑥/𝑙0 「元の世界の量」に戻すには 基準となる量をかける必要がある ෤ 𝑥 = 0.29601 𝑥 = 0.29601𝑙0
  24. 49 49 51 ෨ 𝑘 = 𝑚0 𝑡0 2 𝑘

    動画をスロー再生すると、物が重く見えるのはなぜか? 動画をスロー再生する→𝑡0 を小さくする スロー再生しても、バネは同じものだとみなす → バネ定数෨ 𝑘 を変えない → 𝑚0 を大きくすることと等価 ※ バネ定数を変えたとみなすこともできる
  25. 50 50 51 モデル化 離散化 無次元化 現実 計算機 解釈 (次元を戻す)

    プログラム 計算結果 (無次元量) • 我無次元化した方程式をから、無次元化した結果を得る • 現実世界に戻す際には、基準となる量をかける必要がある • 基準となる量の選び方には任意性がある
  26. 51 51 51 • 数値シミュレーションとは、現実をモデル化し、数 値的に解くことで、現象を理解、予言すること • 数値シミュレーションでは、すべてのルールが既知 であるにも関わらず、非自明な結果が現れる •

    数値シミュレーションは、離散化を伴う • 数値シミュレーションは、無次元化された方程式を 解いており、現実の値に戻す際には任意性を伴う