応用化学基礎演習2 2018/1/10
Mathematicaでプログラミング
Mathematicaを使って、簡単なプログラムについて勉強する。
ランダム関数
マスマティカには任意の実数乱数を発生させるRandom[ ]というコマンドがあります。
これを使うと、意外に色々なことができます。
課題1 1次元のランダムウォーク
「酔っぱらいの歩いた経路を表示せよ」という問題。
まず最初の酔っぱらいはx軸に沿って、まっすぐに歩くことができるが、Y軸方向には上下にフラフラする酔っぱらいです。
x軸方向に1進むごとにY軸方向には、+1、0、−1にふらつきます。
酔っぱらいはどれくらいまっすぐ歩くことができるでしょうか?
やり方
- まずrwalk = { }で中身のないtableを作ります。
- x = 0; y = 0; i = 0;と変数の初期値を作ります。
- While[ ]を使い、x の値を1づつ増やし、y の値は-1、0、+1のいずれかの値で変化させます。
- y の値の変化には、RandomInteger[{-1, 1}]を使います。
- AppendTo[rwalk, {x, y}]で、(x, y)の座標をrwalkに足していきます。
- ListPlot[ ]でプロットします。この際、Joined -> Trueとして各座標を線で結びます。
課題2 2次元のランダムウォーク
二番目の酔っぱらいはさらに酔っぱらってて、もうまっすぐ歩くことは不可能です。上下左右に均等な確率で、1づつ歩いていきます。その経路はどうなるでしょう?
やり方
- 最初は課題6と同じ。
- RandomInteger[{1, 4}]を使い、1〜4の整数を発生させます。
- 1,2,3,4のとき、それぞれx-1, x+1, y-1, y+1と値を変化させます。
- 後は課題6と同じ。
課題3 3次元のランダムウォーク
3次元の酔っぱらいの経路を描きます。
AppendTo[lis, {x, y}]を使う。これは、リストlisの末尾に{x, y}を入れていき、リストの要素を増やしていきます。
やり方
- 最初は課題7と同じですが、今度は3次元なので、x, y, zの座標が必要になります。
- 課題7と同じ。ただし、今度は1〜6の整数を発生させないといけません。
- 後は課題7と同じ。
課題4 足し算テスト
0から50までの数字の足し算の問題を5問解き、点数を表示する簡単なプログラムを作る。
具体的には次のようなブログラムを作る。
- まず変数の初期値を決めます。問題は5問なので、5まで数えるための変数iと正解の数を数える変数seikaiの初期値をゼロとします。
- ループを開始します。たとえば、 While[i < 5, 作業; i=i+1];を使います。
- RandomInteger[{0, 50}]を2回使い、ふたつの整数int1とint2を発生させます。
- そのふたつの整数を足し合わせ、あらかじめ正解ansを計算しておきます。
- Print[int1, " + ", int2, " = ?"]を使い、出題します。
- you = Input[ ]を使い、新しいウィンドウが開き、そこに解答youを書き込めるようにします。
- ウィンドウに書込み、エンターを押すと、ウィンドウは閉じます。
- Ifを使い、解答の正否you == ansを判定します。正解の場合は、Print["あなた=", you, " 正解!"]として、正解であることを表示します。
- さらにこのとき、正解の数を数える変数seikaiの値を1大きくします。
- 不正解の場合は、Print["あなた=", you, " はずれ!", " 答えは",
ans, "です"]]と表示します。
- 一問ごとに空行を入れたほうが見やすいので、Print[" "]とスペースを出力します。
- ループが終了したら、Print["ゲ-ム終了です."]と表示します。
- 最後にPrint[N[(seikai*100)/5], "点!"]として、点数を表示します。
課題はマスマティカのファイル(拡張子が.nb)を添付して送ってください。
結果のみではなく、コマンドそのものも送ること。
完成したら、ファイルをメールに添付して提出すること。
送り先:ynagasaあっとfc.ritsumei.ac.jp
- メールのタイトルは”基礎演習2レポート:氏名と学生証番号”とすること。
- 提出ファイルの最初には必ず氏名と学生証番号を記入すること。
- ファイル名は “氏名+180110”とする。(例:立命太郎180110)
(「.nb」等の拡張子は自動で付くので、自分で書き込む必要はない)
- ファイル名の「氏名」以外は必ず半角。
- 最終締め切り:2018年1月16日(火曜)
- 日常点評価の提出課題は定期試験と同等の意味があるので真剣に取り組むこと。