MATLAB利用streamslice()函数绘制流线
1、第一,想要绘制的图形如下图:流场绕过半圆形物体时的流线图。

2、第二,针对上述流场绕过半圆形物体的问题,给出了如下MATLAB代码,但是该段代码运行不行,这里先给出绕流公式(如下图)。
我想画出下面那样绕过去的样子
[x,y] = meshgrid(-20:0.1:20,-10:0.1:10);
r = sqrt(x.*x+y.*y);
costheta=x./r;
sintheta=y./r;
d=10./2./r; %10是下图⚪的直径
ur=-0.5*costheta.*(d.^3-d*3+2);
utheta=-0.5*sintheta.*(d.^3-d*3+4);
u=-ur.*costheta-utheta.*sintheta;
v=-ur.*sintheta+utheta.*costheta;
figure
starty = 0:2:20;
startx = zeros(size(starty));
streamline(x,y,u,v,startx,starty)

3、第三,在上述代码的基础上进行了改进,给出如下MATLAB代码,该段代码可以运行出流场绕过半圆形物体时的流线。
close all; clear all; clc
[x,y] = meshgrid(-20:0.1:20,0:0.1:10);
r = sqrt(x.*x+y.*y);
costheta=x./r; sintheta=y./r; d=10./2./r;
ur=-0.5*costheta.*(d.^3-d*3+2);
utheta=-0.5*sintheta.*(d.^3-d*3+4);
u=-ur.*costheta-utheta.*sintheta;
v=-ur.*sintheta+utheta.*costheta;
figure('Position',[100 100 800 300]);hold on
streamslice(x,y,u,v);
fai = 0:0.1:1.1*pi; R=5; x=R*cos(fai);y=R*sin(fai);% 圆的参数方程
fill(x,y,[1,1,1]); % 填充式画半圆
plot(R*cos(fai),R*sin(fai),'k-','LineWidth',3); % 线条式画半圆
axis([-20,20,0,10]);axis fill;box on
set(gca,'TickDir','in','XTick',[-20:10:20],'YTick',[0:2:10])

4、第四,保存和运行上述代码,得到如下流场绕过半圆形物体时的流线图。

5、第五,如果把代码中的fill(x,y,[1,1,1])注释掉或者删除掉,得到图像如下,就会发现流场穿过半圆形物体,这显然不合适,所以fill()这个用来填充颜色(这里填充的是白色)的函数很有用。

6、第六,streamslice(x,y,u,v)函数用于绘制流线,关于它的用法参见MATLAB帮助文档。
