レポート課題: pythonで行列計算・画像
PDFにして, manabaで提出すること。以下, 特に断っていない場合は, ipython3でコマンドを打っている状況を想定する。
(1) 今回学んだ, python入門の13~15に載っているレポート課題の全てに取り組むこと。
(2) 「ライブ講義 大学1年生のための数学入門」の問282 (森林の経年変化のマルコフ過程)の(4)を, pythonを使って数値的に解き, 森林面積が年と共にどう変わるか, グラフを描け。ヒント: 対角化とか忘れて, ただひたすら行列Aの積を繰り返す。行列Aは以下のように定義できる:
A=np.array([[0.8, 0.1],[0.2, 0.9]])
そして, 状態を表すベクトルは, 最初は
c=np.array([80, 20])
そして1年後は,
c=np.dot(A, c)
で求まる。これをもとに2年めを計算し, それをもとに3年めを計算し, というのをforループで繰り返せばよい。途中経過を保存するのは, 適当なリストに += で追加していけばよい(前回やったよね!)。∞のかわりに適当に大きな数を自分で決めよ。
(3) 「生物資源の基礎数学教材」の問511(島の草が有限の場合の羊と狼の闘い)を, pythonを用いて解け。ヒント: これの(15)
(4) 「生物資源の基礎数学教材」の問517(バネの減衰つき振動)を, pythonを用いて解け。ヒント: 前問を参考に。
(5) 以下を打って実行してみよ。結果はどうなるか? このプログラムは各行で何をしているか, 1行ずつ解読・解説し, 全体として何をしているのか考察せよ。
X0, X1, dx = -1.3, -1.1, 0.0005 Y0, Y1, dy = 0.1, 0.4, 0.0005 x, y=np.meshgrid(np.arange(X0, X1, dx), np.arange(Y1, Y0, -dy)) c=x+y*1j z=np.zeros(c.shape) m=np.zeros(c.shape) for i in range(0,400): z=z**2+c m+=np.isnan(np.abs(z)) plt.imshow(m%100%21) plt.show()
(6) 前問のプログラムを自分なりに改造して, もっとイケてる美しい図を作れ。
(7) プログラミングを学ぶ上で, 自分なりに適した勉強法は何か? 考察して述べよ(適した勉強法は人それぞれで違う。君には君に適した勉強法があるはず。それを基礎数IIなどの経験を元にみつけてほしい)。
(8) 以下のチェックリストの各項目について, ○かXかで自分自身を評価せよ。
- pythonで行列をいじるとき, リストでやるのはイケてなくて, numpy.ndarrayでやるのがイケてると理解した。
- numpy.ndarrayで行列のスカラー倍, 行列どうしの足し算をやる方法を理解した。
- numpy.ndarrayで行列どうしの積をやるとき, うっかりしてると成分どうしの積になってしまい, ちゃんとした結果にならない, ということを理解した。
- numpyで, 零行列や「成分すべてが1の行列」を作るやりかたを習得した。
- numpyで, ベクトルを折り返して行列にするやりかたを理解した。
- numpyで, 行列の転置のやり方を理解した。
- 行列を図にする方法(色の図と等値線図)を習得した。
- 2変数関数の図を書く時, np.meshgridという関数の働きを理解した。
- 図を横に2枚並べて同時に表示する方法を理解した。
- 2次元のガウス関数がどういうものか理解した。
- 複素関数は, 2つの2変数実数関数の組み合わせであることを理解した。
- c^2という複素関数は, 2つの鞍型の関数(筑波山みたいなやつ)の組み合わせだと理解した。
- 2変数関数を色の図にするとき, %2などをすることの意味と効果を理解した。
- オーバーフローとは何か理解した。
Keyword(s):
References:[python入門]