如何在Julia中绘制矢量场

如何在Julia中绘制矢量场

本文介绍了如何在Julia中绘制矢量场?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在Julia中绘制矢量场.我在此处找不到示例.此处有一些使用plotly的示例,但是它们对我不起作用.我想通过plotlyjsplotly绘制矢量场.

I want to plot a vector field in Julia. I could not find an example here.Here there are some examples using plotly, however, they do not work for me. I would like to plot the vector field by plotlyjs or plotly.

这是Julia中的示例代码:

Here is an example code in 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示例:

Here is the Matlab example:

[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)

推荐答案

简短的答案:使用Plots.jl中的quiver.

The short answer: use quiver from Plots.jl.

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


在下面,我将尝试完全重新创建您在Matlab中显示的示例.


In the following, I'll attempt to fully recreate the example you showed in Matlab.

首先,我们将导入Plots并启用plotly后端.

First, we'll import Plots and enable the plotly backend.

using Plots
plotly()

我们需要定义类似于Matlab的meshgrid的函数.由于绘图将对我们的点阵列进行操作而无论其尺寸如何,因此我选择仅使用repeat并使用展平"的输出.

We need to define a function similar to Matlab's meshgrid. Since Plots will operate on our arrays of points regardless of their dimensionality, I chose to simply use repeat and use the "flattened" outputs.

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

现在,我们可以使用与Matlab代码相同的逻辑来创建xyuv.为了简洁起见,我们可以使用@.宏将给定表达式中的所有调用向量化.

Now, we can create x, y, u, and v using the same logic as the Matlab code. For the sake of brevity, we can use the @. macro to vectorize all calls in the given expression.

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

在这里,我们可以简单地使用Plots中的quiver函数,将uv作为2元组传递给关键字参数quiver.

From here, we can simply use the quiver function from Plots, passing u and v as a 2-tuple to the keyword argument quiver.

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

结果接近Matlab输出,但似乎Plots.jl将箭头缩放为比在Matlab中更长.不过,这很容易解决.我们可以简单地将uv乘以比例常数进行广播.

The result is close to the Matlab output, but it seems that Plots.jl scales the arrows to be longer than they are in Matlab. This is easily fixable, though; we can simply broadcast-multiply u and v by a scale constant.

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

这篇关于如何在Julia中绘制矢量场?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 09:28