我想在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
我该怎么做?
答案 0 :(得分:1)
设置您的半径,圆心和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)
即可进行策划。