我想使用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);
答案 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
的有效输入。这样做的原因是streamslice
和x
在调用时转换为向量:
y
我的猜测是你可以删除所有这些索引,只需写:
x = sort(x(idx));
y = sort(y(idx));
所以你得到:
答案 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);