プログラミングの準備

  • サテライト演習室のPC端末で使用するUSBを配布します.それ単体でiPython Notebook (Jupiter)が動くようにしてあります.
  • 授業ではこのJupiterを使い,乱数の発生からはじめて,ブラウン運動のシミュレーションをやってみます.
  • その他,ググればたくさん情報があります.それらを有効に活用してください.

それでは以下に従って動作を確認してください.

  1. USBをWindows PCに挿して,Fドライブとして認識させる.
  2. F:\Start Menu\Jupyter Notebook をクリックして,Jupiterを起動する.
  3. ブラウザ内の右上部にあるタブ"New"から一番下の"Python 3"を選択する.
  4. セル内に以下を記入
    2+3
  5. プルダウンメニューから"Cell"->"Run Cells and Select Below"を選択し,正しい答えが出力されることを確認

次にグラフを書いてみます.

  1. セル内に以下を記入する(#より右はコメントなのでなくてもよい).
    % matplotlib inline
    import numpy as np               # numpyという数値計算用のライブラリを使用する.関数***を使う時には"np.***"として呼び出す.
    import matplotlib.pyplot as plt  # matplotlibというグラフィックライブラリを使用する.関数***を使う時には"plt.***"として呼び出す.
  2. プルダウンメニューから"Cell"->"Run Cells and Select Below"を選択
  3. セル内に以下を記入する(#より右はコメントなのでなくてもよい).
    x = np.arange(-3, 3, 0.1)        # -3から3の範囲を間隔0.1で刻み,配列xに保存
    y = np.sin(x)                    # 配列xの各要素について,y=sin(x)を計算し配列yに保存
    plt.plot(x, y)                   # x vs. y を図に出力
  4. プルダウンメニューから"Cell"->"Run Cells and Select Below"を選択し,正しいグラフが出力されることを確認

書いたスクリプトに名前を付けて保存します.

  1. プルダウンメニューから"File"->"Rename"を選択し,"test1"という名前を付ける.
  2. プルダウンメニューから"File"->"Save and Checkpoint"を選択し,スクリプトを保存する.
  3. プルダウンメニューから"File"->"Close and Halt"を選択し,Jupiterを終了する.さらにブラウザも終了する.
  4. F:\Start Menu\Jupyter Notebook をクリックして,Jupiterを起動する.
  5. 起動画面で F:\work の中のファイルが見えていると思うので,test1.ipynb をクリックして起動する.
  6. プルダウンメニューから"Cell"->"Run All"をしてください.スクリプトが最初から最後まで全部実行されて,グラフが出るはずです.

コンピュータで擬似乱数を発生させる

使用するライブラリのインポート

  • セル内に以下を記入して実行
    % matplotlib inline
    import numpy as np
    import matplotlib.pyplot as plt

一様乱数

  • セル内に以下を記入して実行→発生させたN個の乱数値の頻度分布と一様分布の理論値がプロットされる.
    N = 100000                           # 発生する乱数の数
    np.random.seed(0)                    # 乱数の初期化
    R = np.random.rand(N)                # 0〜1の範囲で一様分布を持つ乱数を発生させ,Rに格納
    plt.hist(R, bins=100,normed=True)    # Rに格納された乱数の分布を100本の棒グラフにする.さらに総面積が1になるよう規格化
    x = np.arange(0, 1, 0.01)            # 0から1の範囲を間隔0.01で刻み,配列xに保存
    y = 1+0*x                            # 配列xと同じ数だけ一様分布の理論値1を配列yに保存
    plt.plot(x, y, lw=2, color='r')      # x vs. yを線幅2の赤い線で描く
    plt.show()                           # 上記のグラフをまとめて1つの図に出力

正規分布に従う乱数

  • セル内に以下を記入して実行→発生させたN個の乱数値の頻度分布と正規分布の理論値がプロットされる.
    N = 100000                           # 発生する乱数の数
    np.random.seed(0)                    # 乱数の初期化
    R = np.random.randn(N)               # 平均=0,標準偏差=1の正規分布に従う乱数を発生させ,Rに格納
    plt.hist(R, bins=100,normed=True)    # Rに格納された乱数の分布を100本の棒グラフにする.さらに総面積が1になるよう規格化
    x = np.arange(-5, 5, 0.01)           # -5から5の範囲を間隔0.01で刻み,配列xに保存
    y = np.exp(-x**2/2)/np.sqrt(2*np.pi) # 配列xと同じ数だけ正規分布の理論値を配列yに保存
    plt.plot(x, y, lw=2, color='r')      # x vs. yを線幅2の赤い線で描く
    plt.show()                           # 上記のグラフをまとめて1つの図に出力

ランダムウォーク(酔歩)

  • セル内に以下を記入して実行→0〜Lの各試行回数における酔歩の現在位置がプロットされる.
    L = 10000                                # 歩数 i=0,1,2,...,L
    for nseed in range(10):                  # 乱数の種nseedを0から9まで変えて繰り返す
        np.random.seed(nseed)                # 乱数の初期化
        step = np.random.choice([-1,1],L)    # +1 or -1 をL個生成 step(i) = +1 or -1 
        position = np.cumsum(step)           # 位置 position(i)
        plt.plot(position)                   # i vs. position(i)を図に出力
    plt.show()                               # 上記のグラフをまとめて1つの図に出力

宿題

  • 平均が0,標準偏差が1の正規分布に従う乱数を,10^3個,10^4個,10^5個,10^6個発生させ,それぞれの頻度分布を正規分布の理論値と比較せよ.図を添付して次回授業開始までにメールで提出すること.