web-dev-qa-db-ja.com

Juliaでベクトル場をプロットする方法は?

Juliaでベクトル場をプロットしたいと思います。例が見つかりませんでした ここここplotlyを使用した例がいくつかありますが、それらは私には機能しません。ベクトル場をplotlyjsまたはplotlyでプロットしたいと思います。

Juliaのサンプルコードは次のとおりです。

using Plots
pyplot()
x = collect(linspace(0,10,100));
X = repmat(x,1,length(x));
Y = repmat(x',length(x),1);
U = cos.(X.*Y);
V = sin.(X.*Y);
streamplot(X,Y,U,V)

Matlabの例を次に示します。

[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;

figure
quiver(x,y,u,v)

enter image description here

10
MOON

簡単な答え:Plots.jlのquiverを使用してください。

quiver(x, y, quiver=(u, v))

以下では、Matlabで示した例を完全に再現しようとします。

まず、Plotsをインポートし、plotlyバックエンドを有効にします。

using Plots
plotly()

Matlabのmeshgridに似た関数を定義する必要があります。プロットは次元に関係なく点の配列で動作するため、私は単にrepeatを使用し、「フラット化された」出力を使用することを選択しました。

 meshgrid(x, y) = (repeat(x, outer=length(y)), repeat(y, inner=length(x)))

これで、Matlabコードと同じロジックを使用して、xyu、およびvを作成できます。簡潔にするために、@.マクロを使用して、指定された式のすべての呼び出しをベクトル化できます。

x, y = meshgrid(0:0.2:2, 0:0.2:2)
u = @. cos(x) * y
v = @. sin(x) * y

ここから、Plotsのquiver関数を使用して、uvを2タプルとしてキーワード引数quiverに渡すことができます。

quiver(x, y, quiver=(u, v))

Initial plot

結果はMatlabの出力に近いですが、Plots.jlは矢印をMatlabよりも長くなるようにスケーリングしているようです。ただし、これは簡単に修正できます。 uvにスケール定数を単純にブロードキャスト乗算できます。

scale = 0.2
u = @. scale * cos(x) * y
v = @. scale * sin(x) * y

Final plot

6
Harrison Grodin