2017-06-01 32 views
0

我想使用流線顯示矢量場。矢量場在一個點上是單數的。我想去除奇點附近的區域(例如它們與奇點的距離小於1的區域)。我寫了下面的代碼,但它沒有顯示任何東西。任何人都可以幫我嗎?Matlab中的流線輸出爲空

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

@Wolfie你能幫忙嗎?我相信你是能夠回答這些問題的人 –

+0

這個*仍然不是關於MATLAB GUI開發的。 [tag:matlab-guide]標籤不應該在這裏。 – beaker

+0

我編輯了這個問題。你知道什麼是問題嗎? @beaker –

回答

2

的問題與您的代碼是UV都是零,所以你得到的空白。原因是你不使用./的元素分割。因此,作爲第一步,你應該寫:

U = cos(x)./sqrt(x.^2+y.^2); 
V = sin(x)./sqrt(x.^2+y.^2); 

現在UV不爲零,但也不再矩陣,所以它們不是streamslice有效輸入。其原因是,xy打電話時被轉化爲向量:

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

我的猜測是,你可以刪除所有這些索引和簡單的寫:

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 
U = cos(x)./sqrt(x.^2+y.^2); 
V = sin(x)./sqrt(x.^2+y.^2); 
streamslice(x,y,U,V); 

等你拿:

streamslice

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