2017-07-14 5 views
1

にmeshgrideにNAN領域に置き換えてください。(y=0,x=0)(y=0,x=-2)(y=0,x=2)私はベクトル場を表示するには、コードの下に書いたのMatlab

clear all; 
close all; 
phi = 90; 
[x,y] = meshgrid(-3:0.1:3,-3:0.1:3); 
u = (x.*(-1+3.*(x.*cosd(phi)+y.*sind(phi)).^2./(x.^2+y.^2))./(x.^2+y.^2).^(3/2))+... 
    ((x-2).*(-1+3.*((x-2).*cosd(phi)+y.*sind(phi)).^2./((x-2).^2+y.^2))./((x-2).^2+y.^2).^(3/2))+... 
    ((x+2).*(-1+3.*((x+2).*cosd(phi)+y.*sind(phi)).^2./((x+2).^2+y.^2))./((x+2).^2+y.^2).^(3/2)); 
v = (y.*(-1+3.*(x.*cosd(phi)+y.*sind(phi)).^2./(x.^2+y.^2))./(x.^2+y.^2).^(3/2))+... 
    (y.*(-1+3.*((x-2).*cosd(phi)+y.*sind(phi)).^2./((x-2).^2+y.^2))./((x-2).^2+y.^2).^(3/2))+... 
    (y.*(-1+3.*((x+2).*cosd(phi)+y.*sind(phi)).^2./((x+2).^2+y.^2))./((x+2).^2+y.^2).^(3/2)); 
h = streamslice(x,y,u,v,0.5); 

問題があり、3つのuvが無限大になった空間の点があります。 vuは無限になるので、その領域にベクトルフィールドはなく、出力は空の領域です。私はvuの無限部分を省略し、vuの他の部分をプロットしたいと思います。 (y=0,x=0)で例えば、私は(無限ではありません)以下のベクトル場を表示したい:

u = ((x-2).*(-1+3.*((x-2).*cosd(phi)+y.*sind(phi)).^2./((x-2).^2+y.^2))./((x-2).^2+y.^2).^(3/2))+... 
    ((x+2).*(-1+3.*((x+2).*cosd(phi)+y.*sind(phi)).^2./((x+2).^2+y.^2))./((x+2).^2+y.^2).^(3/2)); 
v = (y.*(-1+3.*((x-2).*cosd(phi)+y.*sind(phi)).^2./((x-2).^2+y.^2))./((x-2).^2+y.^2).^(3/2))+... 
    (y.*(-1+3.*((x+2).*cosd(phi)+y.*sind(phi)).^2./((x+2).^2+y.^2))./((x+2).^2+y.^2).^(3/2)); 

答えて

0

あなたが唯一の非有限値置き換えるためにインデックスを作成することができます

u = [1 1 inf NaN 1 1]; 
v = [1 1 inf NaN 1 1]; 

u1 = [2 2 2 2 2 2]; 
v1 = [2 2 2 2 2 2]; 

%Now, if an element of u or v is not finite it is replaced by the same value of the matrices u1,v1. 

u(~isfinite(u))=u1(~isfinite(u)); 
v(~isfinite(v))=v1(~isfinite(v)); 

2番目のオプションを:

あなたもgriddataと非有限値を補間することができます

finite  = isfinite(u) & isfinite(v); 
u = griddata(x(finite), y(finite), u(finite), x, y); 
v = griddata(x(finite), y(finite), v(finite), x, y); 

、BEFORE:

enter image description here

AFTER:

enter image description here

関連する問題