提出課題
Note
- 締め切りや提出方法・提出先については指示を出すのでそれに従ってください。
- 各課題についてプロットを作成するためのスクリプトファイル
kadai1.plt
,kadai2.plt
, ... および、 それによって作成されたプロットkadai1.png
,kadai2.png
, ... を提出してください。 - スクリプトファイルはloadするだけでグラフが表示されるものとします。
- できるだけ見やすいグラフになるように心がけてください。
- 各データファイルは
Github Codespace
の
gnuplot
ディレクトリにも置いてあります。
課題1
\(-1 \leq x \leq 1\), \(-1 \leq y \leq 1\)の範囲で以下のグラフをプロットせよ。
- 半径1の円、ただし凡例は"circle"とする。
- \(x=0\)の直線、ただし凡例は"x = 0"とする。
- \(y=0\)の直線、ただし凡例は"y = 0"とする。
ただし、グラフの縦横比は1:1とする。
Hint
set parametric
で媒介変数を使ったプロットができる。set size square
で縦横比を1:1に設定できる。
課題2
\(-3 \leq x \leq 3\), \(-3 \leq y \leq 3\)の範囲で以下の関数
\[
f(x,y) = x^2 \exp \left(-x^2\right) y^2 \exp \left(-y^2\right)
\]
を3次元プロットせよ。ただし以下の条件を満たすこと。
- カラーマップでプロットすること。
- 3次元的に見えない部分は隠れる(陰線処理)ように表示すること。
- 底面に等高線をプロットすること。
- 等高線は0から0.03刻みとすること。
- メッシュの数を増やすこと。
- x軸の周りに60度、z軸まわりに45度回転させた視点にすること。
Hint
- カラーマップは
set pm3d
で設定できる。 - 陰線処理は
set hidden3d
で設定できる。 - 等高線は
set contour
で、等高線の間隔はset cntrparam
で設定できる。 - メッシュの数は
set isosamples
で設定できる。 - 視点は
set view
で設定できる。
課題3
kadai3.dat はバナナの輸入量のデータである。 これを用いて以下の条件を満足するプロットを作成せよ。
- 横軸は年とすること。
- 左側の \(y\) 軸(第一軸)は総輸入量とすること。
- 右側の \(y\) 軸(第二軸)は各国の輸入量の総輸入量に対する割合とすること。
- 各軸に適切なラベルをつけること。
- 総輸入量は棒グラフでプロットし、凡例は"Total"とすること。
- 各国の輸入量割合は折れ線グラフでプロットし、凡例は 各国名(Taiwan, Ecuador, Philippines )とすること。
- 凡例は見やすい位置に表示すること。
Hint
- 2軸のグラフを作成するには、
set y2tics
で右の \(y\) 軸を有効にし、plot
コマンドでaxes x1y2
を指定する。 - 棒グラフを作成するには
plot
コマンドでwith boxes
で指定する。 - 凡例の設定は
set key
で指定する。
課題4
大気が静水圧平衡になっているとき、地表気圧 \(p_0\) を用いて
\[
p(z) = p_0 \exp \left( -\frac{z}{H} \right) \tag{1} \label{eq:pressure}
\]
という関係が成り立つ。 ここで \(H\) はスケールハイトと呼ばれる量で、大気圧の厚さの目安を表す。
kadai4.dat はラジオゾンデ観測によって得られた気圧の鉛直プロファイルである。 1列目が高度 \(z\) [m]、2列目が気圧 \(p\) [hPa]、3列目が気圧の自然対数 \(\log (p)\)となっている。 この観測データを理論式 \(\eqref{eq:pressure}\) でフィッティングすることで スケールハイトを求め、以下の条件を満足するプロットを作成せよ。
- 横軸を \(z\) (1列目)、縦軸を \(p\) (2列目)をプロットし、凡例を"Observation"とする。
- フィッティングした理論式 \(\eqref{eq:pressure}\) をプロットし、 凡例を"Fitting"とする。
- フィッティングにより得られたスケールハイトをタイトルに表示する。
- 横軸のラベルは"Height [m]"、縦軸のラベルは"Pressure [hPa]"とする。
Hint
- \(\log (p) = \log (p_0) - z / H\) という関係があるため、
観測された \(\log (p)\) と \(z\) の関係を1次関数
\(\log(p) = a + b * z\) でフィッティングすればスケールハイトは
\(H = -1/b\) として求まる。つまり、
のようにフィッティングを行えばよい。これで
a
とb
という 変数にフィッティング結果の値が代入されるので、H = -1/b
で スケールハイトを求めればよい。 - プロットするのは \(p(z)\) であり \(\log(p(z))\) ではないことに注意すること。
- スケールハイトをタイトルに表示するには
set title sprintf("H = %6.1f [m]", H)
などのように すればよい。