MATLAB中streamline函数

系统:Windows 10专业版 1809
matlab版本:R2018a-academic use

以画二维流线为例,官网上的介绍:streamline(X,Y,U,V,startx,starty) 根据二维向量数据 UV 绘制流线图。数组 X 和 Y 用于定义 U 和 V 的坐标,它们必须是单调的,无需间距均匀。X 和 Y 必须具有相同数量的元素,就像由 meshgrid 生成一样。

下面这个是matlab官网的一个例子,我自己添加了网格线的显示

clc;clear;
[x,y] = meshgrid(0:0.1:1,0:0.1:1);%跟meshigrid(0:0.1:1.0)一样
u = x;
v = -y;
figure
quiver(x,y,u,v)
startx = 0.1:0.1:1;
starty = ones(size(startx));
streamline(x,y,u,v,startx,starty)
grid on;
grid minor;

运行得到的结果,为了便于解释,我自己添加了一点东西,如下图

meshgrid是划分网格,[x,y]=meshgrid(0:0.1:1),x,y均是11*11的矩阵,可以看成是在一个在一个1*1的正方行中划分10*10的网格,每个网格的长宽均是0.1,x,y的值已经决定了网格的边界,如下图所示

以第一条曲线(第一个图左边有红色线对应的那条)为例进行说明

startx,starty是起点,startx值为0.1,0.2,……,1.0,starty=1.0(1*10的数组,值全为1),也就是说流线的起点为(0.1,1),(0.2,1),……,(1.0,1.0)。(u,v)是向量,其值与(x,y)有关,比如程序中u=x,v=-y。程序中quiver函数是箭头图,作用是将向量显示为箭头 , 默认情况下,箭头缩放到刚好不重叠,但您可以根据需要将箭头缩放的长一些或短一些 。比如在格点(0.1,1)处,向量(u,v)=(0.1,-1),这个向量的起点不是在原点,而是在格点(0.1,1)处,在图中可以看出向量的大小跟实际不一样,是对向量大小进行了缩放,同样在格点(0.1,0.9),向量起点就在该点,第一张图中的曲线并不是一段一段的直线连接(放大了实际是每段直线相连),可能是在已经划分的网格上进行了细化也有可能是对流线进行了拟合。个人猜测streamline画流线图的步骤是:

根据所划分的网格和规定的起点,先从第一个起点(A)画,根据向量(u,v)的变化画到这个网格的边缘(B),按照这样直到画到网格的边缘。或者是先从第一个起点(A)画,根据(u,v)的变化画到下面一个网格格点所对应的高度(B),向图中用红线标注的那样。

如果在这个过程中遇到了其它问题,欢迎在评论区留言,或者Google一下,也欢迎把具体的解决方法留在评论区,以供后来者参考

欢迎转载,不需注明出处,就说是你写的

参考

guest
0 评论
内联反馈
查看所有评论