とらりもんHOME  Index  Search  Changes  Login

レポート課題: 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かで自分自身を評価せよ。

  1. pythonで行列をいじるとき, リストでやるのはイケてなくて, numpy.ndarrayでやるのがイケてると理解した。
  2. numpy.ndarrayで行列のスカラー倍, 行列どうしの足し算をやる方法を理解した。
  3. numpy.ndarrayで行列どうしの積をやるとき, うっかりしてると成分どうしの積になってしまい, ちゃんとした結果にならない, ということを理解した。
  4. numpyで, 零行列や「成分すべてが1の行列」を作るやりかたを習得した。
  5. numpyで, ベクトルを折り返して行列にするやりかたを理解した。
  6. numpyで, 行列の転置のやり方を理解した。
  7. 行列を図にする方法(色の図と等値線図)を習得した。
  8. 2変数関数の図を書く時, np.meshgridという関数の働きを理解した。
  9. 図を横に2枚並べて同時に表示する方法を理解した。
  10. 2次元のガウス関数がどういうものか理解した。
  11. 複素関数は, 2つの2変数実数関数の組み合わせであることを理解した。
  12. c^2という複素関数は, 2つの鞍型の関数(筑波山みたいなやつ)の組み合わせだと理解した。
  13. 2変数関数を色の図にするとき, %2などをすることの意味と効果を理解した。
  14. オーバーフローとは何か理解した。
Last modified:2020/02/05 21:43:17
Keyword(s):
References:[python入門]