在 matlab 中给定区域内(两个圆圈之间)绘制矢量场
Plot vector field within given region (between two circles) in matlab
我想在 Matlab 中绘制下面的矢量场:
u = cos(x-x_0).*y-y_0;
v = sin(x+x_0).*y+y_0;
我可以在网格中轻松完成,例如在 x 和 y 方向上从 -2 到 2:
x_0=2; y_0=1;
[x,y] = meshgrid(-2:0.2:2, -2:0.2:2);
figure
quiver(x,y,u,v)
但我想在某个区域绘制矢量场,该区域不像上面那样是正方形。我要绘制矢量场的区域是两个圆之间的区域,两个圆都以 (x_0,y_0) 为中心,半径等于 r_1=5
和 r_2=10
我该怎么做?
像这样设置你的半径、圆心和 x
、y
变量
r1 = 5; r2 = 10; % Radii of your circles
x_0 = 0; y_0 = 1; % Centre of circles
[x,y] = meshgrid(x_0-r2:0.2:x_0+r2,y_0-r2:0.2:y_0+r2); % meshgrid of points
然后得到哪些点在两个圆所描述的 annulus 内,通过使用定义区域的圆方程来做到这一点:
idx = ((x-x_0).^2 + (y-y_0).^2 > r1^2 & (x-x_0).^2 + (y-y_0).^2 < r2^2);
定义矢量场
u = cos(x-x_0).*y-y_0;
v = sin(x+x_0).*y+y_0;
然后像您一样使用 quiver
绘制这些点的矢量场:
quiver(x(idx),y(idx),u(idx),v(idx));
输出:
编辑:
如果你的矢量场很复杂,你可以通过先从 x
和 y
中删除你不感兴趣的元素来节省大量计算时间。计算后 idx
, 做:
x = x(idx);
y = y(idx);
然后计算u
和v
,你可以通过调用quiver(x,y,u,v)
.
来绘制
我想在 Matlab 中绘制下面的矢量场:
u = cos(x-x_0).*y-y_0;
v = sin(x+x_0).*y+y_0;
我可以在网格中轻松完成,例如在 x 和 y 方向上从 -2 到 2:
x_0=2; y_0=1;
[x,y] = meshgrid(-2:0.2:2, -2:0.2:2);
figure
quiver(x,y,u,v)
但我想在某个区域绘制矢量场,该区域不像上面那样是正方形。我要绘制矢量场的区域是两个圆之间的区域,两个圆都以 (x_0,y_0) 为中心,半径等于 r_1=5
和 r_2=10
我该怎么做?
像这样设置你的半径、圆心和 x
、y
变量
r1 = 5; r2 = 10; % Radii of your circles
x_0 = 0; y_0 = 1; % Centre of circles
[x,y] = meshgrid(x_0-r2:0.2:x_0+r2,y_0-r2:0.2:y_0+r2); % meshgrid of points
然后得到哪些点在两个圆所描述的 annulus 内,通过使用定义区域的圆方程来做到这一点:
idx = ((x-x_0).^2 + (y-y_0).^2 > r1^2 & (x-x_0).^2 + (y-y_0).^2 < r2^2);
定义矢量场
u = cos(x-x_0).*y-y_0;
v = sin(x+x_0).*y+y_0;
然后像您一样使用 quiver
绘制这些点的矢量场:
quiver(x(idx),y(idx),u(idx),v(idx));
输出:
编辑:
如果你的矢量场很复杂,你可以通过先从 x
和 y
中删除你不感兴趣的元素来节省大量计算时间。计算后 idx
, 做:
x = x(idx);
y = y(idx);
然后计算u
和v
,你可以通过调用quiver(x,y,u,v)
.