绘图流功能

时间:2016-02-21 20:02:35

标签: matlab

我正在尝试使用流函数绘制流线。

enter image description here

我使用下面的代码,但它不起作用

syms R r Y y a a_bar pi Gamma;     
k=sqrt((4*r*R)/((y-Y)^2+(r+R)^2));
k_bar=sqrt((4*r*R)/((y+Y)^2+(r+R)^2));
[K1,E1]=ellipke(k);
[K2,E2]=ellipke(k_bar);
U=Gamma*(((R*r)^(1/2)/(2*pi*k))*(((2-k^2)*(K1))-(2*E1))-((R*r)^(1 /2)/(2*pi*k_bar))*(((2-k_bar^2)*(K2))-(2*E2)));

Ur=(1/r)*(diff(U,y));
Uy=(1/r)*(diff(U,r));
Gamma = -0.0045;                     
a_t= 0.0053;                        
R= .02;                                                                  
Y= 0.018;
[r,y] = meshgrid(0:0.1:1,0:0.1:1);
u= subs(Ur);
v= subs(Uy);
figure
quiver(r,y,u,v)
startx = 0.1:0.1:1;
starty = ones(size(startx));
streamline(x,y,u,v,startx,starty)

由于

enter image description here

1 个答案:

答案 0 :(得分:0)

您的网格包含0,因此您会得到零除错误。你有两个选择。

摆脱网格中的零点。例如:

...
[r,y] = meshgrid(eps:0.1:1,eps:0.1:1);
u = subs(Ur);
v = subs(Uy);
...

或者用数字方式评估符号表达式,使得除以零会导致浮点NaN

...
[r,y] = meshgrid(0:0.1:1,0:0.1:1);
u = eval(Ur);
v = eval(Uy);
...

由于您在数字上进行绘图,因此后者可能更有意义。大多数Matlab绘图函数忽略NaN值(尤其不确定quiverstreamline)。您在最后一行中也有一个未定义的变量 - 您的意思是r而不是x吗?