情報科学概論II(実習) 8回目
課題の提出〆切りは来週の13:00まで.課題提出はNUCTにログインして行うこと.
講義資料
今日やること
-
Pythonプログラミング —NumPy, Matplotlibを用いたグラフの作成—
講義資料を参考にして、以下の各課題のプログラムをそれぞれ作成し,実行せよ.
NUCTを使用した課題の提出については,各設問の指示に従うこと.
(実際に実行してエラーのないことを確かめておくこと。)
課題8-1
-2π < x < 2πの範囲で y = sin(2x), y = cos(x), y = tan(x), y = exp(0.2x)
の関数を重ねてグラフに表示せよ.表示した結果をPNGファイルに書き出し,NUCTの添付ファイルとして提出せよ.
課題8-2
温度 T [K]の黑体が放射する単位波⻑あたりの放射強度(intensity) I [J/(m 2 s str m)]は,波⻑[m]をλとすると以下の式で表される.

8-2-1 関数定義
Python上で上式を x = λ, y = Tとし I(x,y) の形で関数を定義し,その式をNUCTの入力欄に解答せよ.ただし,c (光速), h (プランク定数), k (ボルツマン定数) を次のように定義する.Python上でのc, h, kの定義式も含めて解答せよ.
c (m/s) = 2.99792458e8
h (J s) = 6.626068e-34
k (J/K) = 1.3806504e-23
8-2-2 2次元プロット
T = 60000 K, 6000 K, 600 Kの時の放射強度スペクトルを表示し,そのPNGファイルを添付せよ. 縦軸,横軸共に対数表示(set log
で縦軸横軸共に対数表示になる),横軸は波⻑(1nmから1cm),縦軸は放射強度(見易いように調整せよ)とする.またそれぞれの温度の時に放射強度が最大になる波⻑を有効数字一桁でグラフから読み取り,その値をNUCTの入力欄に解答せよ. 各軸のラベルもきちんと表示しておくこと.
ヒント: 波⻑を1 nmから1 cmまでを100点ほどで表そうと,x=np.linspace(1e-9,1e-2,100)
などとした場合,サンプリング間隔が広すぎて横軸を対数表示にした際にうまく描画できない.愚直な方法は1e-9程度のサンプリング間隔を実現するために1000万点ほどに増やすこと.もっと上手い方法としては、対数表示したときにサンプリングが等間隔になるように工夫すれば100点ほどで十分描画できる.
8-2-3 2次元カラーマップ
x軸を波⻑(1 nmから1 cm),y軸を温度(100 Kから100000 K),色調を放射強度(100から1e19 [J/(m2 s str m)]) とし,すべての軸を対数表示として2次元カラーマップをグラフ化し,そのPNGファイルを添付せよ. 各軸のラベルもきちんと表示しておくこと.
8-2-4 Numpyを利用したデータの加工
波⻑について積分した温度T [K]の黑体の全放射強度

をNumPyのtrapz関数を用いて計算し,横軸を温度T [K]、縦軸を全放射強度J [J/(m2 s str)]としてプロットし、全放射強度が温度の4乗に比例することを確認せよ.
おまけ. 全放射強度の解析解

追加課題(必答では無いが取り組んだ場合は加点) 3次元プロット
x軸を波⻑(1 nmから1 cm),y軸を温度(100 Kから100000 K),z軸を放射強度(見易いように調整せよ)とし,すべての軸を対数表示として3次元グラフ化し,そのPNGファイルを添付せよ.表示角度,表示オプションは見やすいと思うように設定すること.
各軸のラベルもきちんと表示しておくこと.3D表示される角度は,axes
オブジェクトの view_init
関数で変更できる.例: axes.view_init(30,45)