sin(x*x) を描いてみる.
gnuplot> set xrange [0:10] gnuplot> plot sin(x*x)
簡単に描けるのだが,描かれた図は何かおかしい(と気づいて欲しい).
sin の中に入っている x*x は連続な関数で,0<x<10 の範囲では単調に増加する. なので,sin(x*x) は横方向に伸び縮みはしても基本的には sin カーブで,-1 と 1 の間を滑らかにくねくねする曲線になっているはずである. でもそうなっていない. 明らかに間違っている.
gnuplot は式を図にするとき,有限個の点で値を計算して,点の間を直線でつなぐ. 計算する点の数が少ないと,曲線を十分に表現することができないのである.
gnuplot> plot sin(exp(x)) with points
とやってみると,描画で使用した点の位置がわかる. 点と線の両方を描いてみると,よくわかる.
gnuplot> plot sin(exp(x)) with linespoints
この問題は,描画で使用する点の数を増やせば解決する.
gnuplot> set samples 1000 gnuplot> plot sin(x*x) with lines
この類の問題は,計算機が連続なものを離散化して扱うことによって生じるもので,gnuplot に限らずいろいろなところに現れる. 計算機が計算して出した結果は正しいと思ってはいけない. 計算機が出したものは,間違っている可能性があると思って,いつも見直す必要がある.
媒介変数表示された曲線を図に描く.
曲線上の点(x,y)が,変数 t を用いて
x = f(t) y = g(t)
で表される場合を考える.
媒介変数表示を使うときは,最初に
gnuplot> set parametric
とする. 媒介変数表示を使うのをやめるときは,
gnuplot> unset parametric
x = cos(t) y = sin(t)
これを図に描くには
gnuplot> set parametric gnuplot> set xrange [-1.2:1.2] gnuplot> set yrange [-1.2:1.2] gnuplot> set size square gnuplot> plot cos(t), sin(t)
グラフを描く範囲は,媒介変数 t の範囲として指定することができる.
gnuplot> set trange [0:pi]
x = a ( t - sin(t) ) y = a ( 1 - cos(t) )
ここで a は円の半径. a=1 で,0 < t < 2 pi の範囲を描くなら
gnuplot> set parametric gnuplot> a=1 gnuplot> set trange [0:2*pi] gnuplot> set xrange[0:10] gnuplot> set yrange[0:2] gnuplot> set size ratio 0.2 gnuplot> plot a*( t - sin(t) ), a*( 1 - cos(t) )
円周率は pi と書いたら使うことができる. set size ratio は縦軸の長さを横軸の長さに対する比で設定する.ここでは横軸10に対して縦軸は2なので,0.2を設定すると縦横のスケールが同じになる.