2017-06-01 5 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

@ウォルフィー助けてもらえますか?私はあなたがこれらの質問に答えることができると確信しています –

+0

これはまだMATLABのGUI開発ではありません。 [tag:matlab-guide]タグはここには置かないでください。 – beaker

+0

質問を編集しました。あなたは何が問題なのか知っていますか? @ビーカー –

答えて

2

あなたのコードの問題はUVがすべてゼロであるということですので、あなたは、ホワイトスペースを取得します。その理由は、./で要素単位の除算を使用しないためです。

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

UVはゼロではありませんが、またもう行列されていないので、彼らはstreamsliceの有効な入力ではありません。だから、最初のステップとして、次のように記述する必要があります。

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

はそうあなたが得る:

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

私の推測では、あなたがこのすべてのインデックスを削除し、単に書くことができるということである。その理由は、呼び出し時にxyは、ベクトルに変換されるということである

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