Matlab中的流线输出为空

时间:2017-06-01 18:58:28

标签: matlab matlab-figure

我想使用streamline来显示矢量字段。矢量场在某一点上是单数的。我想删除奇点附近的区域(例如它们与奇点的距离小于1的示例区域)。我写下面的代码,但它没有显示任何内容。有谁可以帮助我?

clear all;
close all;
r1 = 1; r2 = 5;  % Radii of your circles
x_0 = 0; y_0 = 0; % 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

idx = ((x-x_0).^2 + (y-y_0).^2 > r1^2 & (x-x_0).^2 + (y-y_0).^2 < r2^2);
x = sort(x(idx));
[x, index] = unique(x);
y = sort(y(idx));
[y, index] = unique(y);
U=cos(x)/sqrt(x.^2+y.^2);
V=sin(x)/sqrt(x.^2+y.^2);
streamslice(x,y,U,V);

2 个答案:

答案 0 :(得分:2)

您的代码存在的问题是// Regex.Match(line, @"/--<UsrDef_Mod_.*_BeginMod>/g", Regex.Match(line, @"--<UsrDef_Mod_.*_BeginMod>", U都是零,因此您获得了空格。原因是你没有使用V的元素划分。所以作为第一步你应该写:

./

现在U = cos(x)./sqrt(x.^2+y.^2); V = sin(x)./sqrt(x.^2+y.^2); U不是零,但也不再是矩阵,因此它们不是V的有效输入。这样做的原因是streamslicex在调用时转换为向量:

y

我的猜测是你可以删除所有这些索引,只需写:

x = sort(x(idx));
y = sort(y(idx));

所以你得到:

streamslice

答案 1 :(得分:0)

我认为你误解了 streamslice 的概念。这是你期待的吗?

close all;
r1 = 1; r2 = 5;  % Radii of your circles
x_0 = 0; y_0 = 0; % Centre of circles
[xx,yy] = meshgrid(x_0-r2:0.2:x_0+r2,y_0-r2:0.2:y_0+r2); % meshgrid of points

% idx = ((xx-x_0).^2 + (yy-y_0).^2 > r1^2 & (xx-x_0).^2 + (yy-y_0).^2 < r2^2);
% x = sort(xx(idx));
% [x, index] = unique(x);
% y = sort(yy(idx));
% [y, index] = unique(y);
U=cos(xx)./sqrt(xx.^2+yy.^2);
V=sin(xx)./sqrt(xx.^2+yy.^2);
streamslice(xx,yy,U,V);