web-dev-qa-db-ja.com

gnuplotを使用したベクトル場

各点(x、y)の方向がtangent(alpha) = f(x, y)で与えられるベクトル場をプロットするにはどうすればよいですか?

13
vedro so snegom

私の知る限り、gnuplotはファイルからデータを読み取るときにのみベクトル場をプロットできます。ファイルには、x、y、deltax、delta yの4つの列が必要です。その後、gnuplotは、ファイルの各行について(x、y)から(x + deltax、y + deltay)までのベクトルをプロットします。

plot "file.dat" using 1:2:3:4 with vectors head filled lt 2

Gnuplotの使用を主張していない場合は、これをより良くまたは少なくともより簡単にすることができる他のツールがあります。私は個人的に 漸近線 を使用します。漸近線にプロットされたベクトル場の例があります ここ

19
user629132

この質問/回答は少し古いようです。gnuplotは最新バージョンで少し変更されていると思いますので、おそらく回答を更新する必要があります。

私はここで、素敵でコンパクトな解決策を見つけました: http://gnuplot.10905.n7.nabble.com/Vector-Fields-td3627.html

便宜上、これを報告します。

_set xrange [-5:5]
set yrange [-5:5]
# only integer x-cordinates
set samples 11
# only integer y-cordinates
set isosamples 11
# we need data, so we use the special filename "++", which
# produces x,y-pairs
plot "++" using 1:2:1:(2.*$2) with vectors
_

ここで、元の質問は、ベクトル場F(x,y) = <x, 2y>をどのようにプロットするかでした。トリックはプロット「++」にあります。これは、using指定子で関数を使用できるようにする特別なファイル名です。

したがって、@ Janが回答で述べたように、gnuplotはベクトル場をプロットするためにデータファイルに4つのフィールドを必要としますが、ここではフィールドは合成であり、2つの関数で生成されます。

定義された関数を使用した同等の定式化は次のようになります。

_set xrange [-5:5]
set yrange [-5:5]
dx(x) = x
dy(x) = 2*x
plot "++" using 1:2:(dx($1)):(dy($2)) w vec
_

詳細については、_help special-filenames_を参照してください。

こんにちは

12
AkiRoss