GNUPLOT

- not so Frequently Asked Questions -

update 2005/11/19

陰関数の解法

関数がy=f(x)のように明示的に表現されておらず,f(x)+g(y)=0のような 形で与えられている場合は,gnuplotで関数定義することができません.この 様な陰関数をgnuplotで表示するには,パラメータ表示するか,関数を3次元で 定義し直し,z=0面との交線を求める方法を使います.

パラメータで関数を再定義できるなら,図の表示は簡単です.例えば 円の方程式 x*x+y*y=r*r はx=r*sin(t), y=r*cos(t)と表すことができますので, 次のようにして円を描くことができます.

gnuplot> set parametric

dummy variable is t for curves, u/v for surfaces
gnuplot> set size square
gnuplot> r=1
gnuplot> plot r*sin(t),r*cos(t)

パラメータで表すことが難しい陰関数の場合は,まず関数を3次元曲面とし て定義します.次の例は,x^3-2xy + y^3=0 という関数です.

gnuplot> f(x,y)= x**3 - 2*x*y + y**3

この曲面 f(x,y) と z=0の交線が,この関数の解となります.z=0面を3次元プロットの 底面とするために, set ticslevel 0 を与えておきます.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set zrange [0:5]
gnuplot> set ticslevel 0
gnuplot> set view 40,340
gnuplot> set isosample 100,100
gnuplot> splot f(x,y)
implicit1

この図の底面に描かれた曲線が,f(x,y)=0の解となります.この曲線を取り 出すために,等高線を用います.等高線データを一旦ファイルに落しておきます.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set zrange [*:*]
gnuplot> set cont base
gnuplot> set cntrparam levels discrete 0,0
gnuplot> unset surface
gnuplot> set surface
gnuplot> set term table
gnuplot> set output "cont.dat"
gnuplot> splot f(x,y)

次にファイルに書き出されたデータを,いつもの要領でグラフにします.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set size square
gnuplot> plot "cont.dat" w l
implicit2

ファイルに書き出さない方法もあります.等高線を-0.4から0.1づつ増やして描いて いますが,それぞれの曲線が x^3-2xy + y^3=定数 の解となっています.

gnuplot> set xrange [-2:2]
gnuplot> set yrange [-2:2]
gnuplot> set view 0,0
gnuplot> set isosample 100,100
gnuplot> set size square
gnuplot> set cont base
gnuplot> set cntrparam levels incre -0.4,0.1,0.4
gnuplot> unset surface
gnuplot> splot f(x,y)
implicit3
up