とらりもん - 基礎数学II後半戦(4): pythonで行列計算・画像 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
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を用いて解け。ヒント: [[これ|レポート課題: 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などをすることの意味と効果を理解した。
# オーバーフローとは何か理解した。
(1) 今回学んだ, python入門の13~15に載っているレポート課題の全てに取り組むこと。
(2) 「ライブ講義 大学1年生のための数学入門」の問282 (森林の経年変化のマルコフ過程)の(4)を, pythonを使って数値的に解き, 森林面積が年と共にどう変わるか, グラフを描け
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を用いて解け。ヒント: [[これ|レポート課題: 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などをすることの意味と効果を理解した。
# オーバーフローとは何か理解した。