Mathematica 6.0/7.0 gnuplot 4 でのベクトル場の描画

2次元や3次元のベクトル場を, 各点(x,y)に(v1(x,y),v2(x,y))の小さい矢印を描くことで表現することを考える.

Mathematica では, 長くGraphics`PlotField(3D)`パッケージのPlotVectorField(3D)を使っていた.

これは6.0までにVectorFieldPlots`パッケージのVectorFieldPlot(3D)に置き換えられたが, 7.0ではカーネルに統合され, VectorPlot(3D)となった.

PlotVectorField と VectorFieldPlot/VectorPlotの違いのひとつとして, 前者は矢印の始点が(x,y)上に来るが, 後者では矢印の中点が(x,y)に来るということがある. 両者ともこの振る舞いを変更する方法は用意されていないようだ.

何カ所の点に矢印を描くかは, オプション PlotPointsまたはVectorPointsで制御できるが, 一方向について1個つまりn x 1 個描くことはできない. すなわち, 2次元の図のx軸上だけに描くようなことはできない(矢印の長さを決めるアルゴリズムが2個以上を要求するようなものになっているのか?) しかし,If[,,]などを使って,x軸上以外でベクトル場を強制的に0にしてしまうことで実質的には同じような図が描ける.


一方gnuplotでは,

x y v1(x,y) v2(x,y)

という形式のデータを受け付ける(s)plot with vector がある. こちらの場合は, 始点が(x,y)上に来る. また,

x-(v1(x,y)/2) y-(v2(x,y)/2) v1(x,y) v2(x,y)

とすればもちろん中点を使うことができる. Mathematicaの ListVectorPlot(3D)も同様なことができると思われるが, VectorScale Optionの適切な設定が必要だろう(未検証)