GNUPLOTの第一歩

空間曲線の描き方

3次元空間内にある曲線(空間曲線)の描き方の前に媒介変数表示(パラメー タ表示)された関数の曲面のグラフを書いてみましょう。そのためには

      gnuplot> set parametric

というコマンドをつかいます。このコマンドは、媒介変数で指定された 関数のグラフを表示するためのものです。3次元だけでなく、2次元の グラフでも利用できます。GNUPLOTの FAQの 3.1.5)「媒介変数関数のグラフを描けますか?」か、GNUPLOT 日本語マニュアルparametricを見てくださ い。


パラメータ表示された関数のグラフ

3次元のグラフでは、x,yの2変数関数 f(x,y) = x**2 + y**2 のグラフは splotで書くことができました。

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

しかし、たとえばx=2で一定の平面のグラフはこの方法では描かせようが ないですよね?このときには、

      gnuplot> set parametric

として、媒介変数表示が使えるようにしてから

      gnuplot> splot 2,u,v

とすれば表示できます。これは unset parametric とするまで有効にな ります。

仕組は次の通りです。まず、3次元内の曲面は2つの媒介変数 u と v を用いて表現することができます。たとえば、最初の f(x,y) = x**2 + y**2 のグラフ上の点 (x,y,z) は

      (x,y,z) = (u, v, u**2+v**2)
で表現でき、
      gnuplot> splot u,v,f(u,v)
      gnuplot> splot u,v,u**2+v**2
とすれば、どちらでも最初の例と同じグラフを得ることができます。

x=2で一定の平面を重ねて描いてみましょう。 曲面を2つの媒介変数 u と v でうまく表現することがコツですから、 この平面上の点 (x,y,z) を

      (x,y,z) = (2, u, v)

と表現してやればよさそうですね。曲面を重ねて描くことことは、もち ろんreplotを使えばいいのです。

      gnuplot> splot u,v,f(u,v)
      gnuplot> replot 2,u,v

この画像では位置関係がよくわかりませんが、gnuplot上では、マウスで グラフをつかんで視点をかえることができるので、動かしてみれば位置 関係がつかめると思います。


空間曲線

空間内の曲面は2つの媒介変数で表現できました。それに対して、空間 内の曲線は1つの媒介変数で表現できますね。例えば原点を通り、方向 ベクトルが(1,2,3)の直線は、媒介変数 u を使えば

      (x,y,z) = (u,2u,3u)

でした。gnuplotでもこれをそのまま使って、

      gnuplot> splot u,2*u,3*u

とすることができます。媒介変数として v をつかってもかまいません。

      gnuplot> splot v,2*v,3*v

螺旋は次のようにして表示できますね。

      gnuplot> splot u,sin(u),cos(u)

曲面の平面による切口を表示する

例として、曲面をある平面で切った状況で、その切口を表示してみます。 まずは双曲面を切ってみましょう。

      gnuplot> f(x,y) = (x**2-y**2)/2
      gnuplot> set zrange [-7:7]     # 見かけをととのえるため。
      gnuplot> splot u,v,f(u,v)      # 曲面
      gnuplot> replot 2,v,u          # 平面
      gnuplot> replot 2,v,f(2,v)     # 切口の曲線

切口の曲線が青いラインで表示されてますね。曲面の関数を変えてみましょう。

      gnuplot> f(x,y) = sin(x)*cos(y)        # 変えたのはここだけです。
      gnuplot> set zrange [-2:2]
      gnuplot> splot u,v,f(u,v)
      gnuplot> replot 2,v,u
      gnuplot> replot 2,v,f(2,v)

斜めの平面 (x=1+v, y=2v、すなわち y=2x+2 をみたす平面) で切ってみましょうか。

      gnuplot> f(x,y) = (x**2-y**2)/2
      gnuplot> set zrange [-10:10]         # 見かけをととのえるため。
      gnuplot> splot u,v,f(u,v)            # 曲面
      gnuplot> replot 1+v,2*v,2*u          # 平面
      gnuplot> replot 1+v,2*v,f(1+v,2*v)   # 切口の曲線

最後に、また平面(x=2)で切ったときに、その平面内を通る接線をひいてみましょう。

      gnuplot> f(x,y) = x**2+x*y-y**2
      gnuplot> set zrange [-10:10]               # 見かけをととのえるため。
      gnuplot> splot u,v,f(u,v)                  # 曲面
      gnuplot> replot 2,v,u                      # 平面
      gnuplot> replot 2,v,f(2,v)                 # 切口の曲線
      gnuplot> dfy(x,y) = x - 2*y                # y方向の偏微分をもとめる
      gnuplot> replot 2,v, f(2,2)+dfy(2,2)*(v-2)  # (x,y)=(2,2)でのy方向の接線を引く

これらもgnuplot上で動かしてみてください。


GNUPLOTの第一歩
小栗栖 修
メールアドレス: ogurisu[AT]kanazawa-u.ac.jp ([AT]を@におきかえてください)