ITPASS 実習レポート 2

名前 中村俊介 

担当情報実験機 joho01

問 1 移流方程式  

注)実習ページのサンプルスクリプトをもとに問1.A、問1.Bともに作成しました。

問1.A 風上差分への書き換え

注)パラメータ設定等はスクリプト本文をご参考ください。

スクリプトのURL 前進差分  http://itpass.scitec.kobe-u.ac.jp/~ns2pole/report02/scripts/quiz1az.txt
スクリプトのURL 後退差分  http://itpass.scitec.kobe-u.ac.jp/~ns2pole/report02/scripts/quiz1ak.txt

スクリプトの解説

<説明>  移流方程式の数値計算での発散を防ぐために、風上差分での数値計算を行うプログラムです。波が前進している時(cが正の時)は後退差分、
      波が後退している時(cが負の時)は前進差分を行います。

<書き換えたコード>前進:中心差分dudx = (u.sft(1) - u.sft(-1)) / (2*dx)から後退差分dudx = (u - u.sft(-1)) / (1 * dx)へ
          後退:中心差分dudx = (u.sft(1) - u.sft(-1)) / (2*dx)から前進差分dudx = (u.sft(1) - u) / (1 * dx)へ、c=1からc=-1へ
<使い方> ○ スクリプトはrubyコマンドで使うことができます。(実行したいファイルのあるディレクトリに移動して、rubyコマンドを用います。
        例えば、quiz1b1.rbというファイルを実行したい時は"ruby quiz1b1.rb"と入力します。
      アニメーションは
      1 rubyコマンドでrubyのプログラム(スクリプト)を実行して(例えばquiz1b1.rbというファイルを実行したい時は"ruby quiz1b1.rb"と入力します。)
      2 "d"を押すことでディスプレイのコマを送ると画像が作れます。
      3 convertでその複数枚の画像をくっつければアニメーションを見る事ができます(下の実行結果はこれを行いました)。詳しくは参考資料をご参照ください。

実行結果へのリンク 前進差分http://itpass.scitec.kobe-u.ac.jp/~ns2pole/report02/scripts/quiz1az.gif
             パラメータ設定
             全ステップ数 nt = 9000
             出力間隔 nt_out = 300
             格子点数 m = 128
             系の大きさ l = 2π
             移流速度 c = -1
             格子の間隔 dx = l / m
             時間ステップdt = 0.001

          後退差分 http://itpass.scitec.kobe-u.ac.jp/~ns2pole/report02/scripts/quiz1ak.gif
             パラメータ設定
             全ステップ数 nt = 9000
             出力間隔 nt_out = 300
             格子点数 m = 128
             系の大きさ l = 2π
             移流速度 c = -1
             格子の間隔 dx = l / m
             時間ステップdt = 0.001

参考資料 計算・可視化結果のファイル入出力(実習のページ)
     http://itpass.scitec.kobe-u.ac.jp/exp/fy2012/120727/practice/file_io.htm 

共同作業した人の名前   特におりません

工夫したこと, 感想  方程式を手で書き換えると離散化のイメージを数式でつかむことができました。もっといろいろな近似を次はしたいです。



問1.B 安定なパラメータ条件の確認

パラメータ設定

全ステップ数 nt = 290
出力間隔   nt_out = 10
格子点数   m = 32
系の大きさ  l = 2π
移流速度   c = -1
格子の間隔  dx = l / m =(2π / 32)
時間ステップ dt = 以下の2パターン

   dt、つまりタイムステップが"dt<(dx/c)"を満たしているときの実行結果(ここではdt=0.195,dx=(l/m)=(2π/32) )
      URLhttp://itpass.scitec.kobe-u.ac.jp/~ns2pole/report02/scripts/quiz1b1.gif
同じくdt、つまりタイムステップが"dt>(dx/c)"を満たしているときの実行結果(今度はdt=0.197,dx=(l/m)=(2π/32))
      URL http://itpass.scitec.kobe-u.ac.jp/~ns2pole/report02/scripts/quiz1b2.gif

アニメーションの解説  ノイマンの理論によると、dt=(dx/c)を境に数値計算が発散してしまう。その具体例。
            (ここでは(dtを変数とするなら)dt=0.1963あたり。)理由は勉強中。

参考資料 数値計算:離散化と計算の安定性(納多哲史)
     https://itpass.scitec.kobe-u.ac.jp/exp/fy2012/120727/lecture-1/pub/

共同作業した人の名前 特におりません 

工夫したこと, 感想

詳しくはノイマンの理論的な話を学ばないとよく解らないのですが、(これから学ぶ予定
です)上記の数値を境に数値計算では不連続的に結果が変わってしまいます。よく近似な
どの話で何かの項を落としてしまうことがありますが、その切り落としが原因で(今回正
に数値計算で起こったように)劇的な変化(カタストロフィー)が起こらないかのどうかの
話は非常に前から疑問に思っていた点でした。何らかの関係性がありそうなのでノイマン
の理論的考察も休みに入って落ち着いたら学びたいです。