我正在尝试使用Computational fluid dynamics区域中的最佳实践技术来分析和可视化velocity field。
给定6个运动粒子的位置和速度数组:分别为x,y,z
和vx,vy,vz
。
我想可视化并计算感应速度场及其属性,例如:curl,divergence,isosurfaces等。
这是我在不调用meshgrid
的情况下就可以使用的volume visualization函数的适度脚本(以避免内插和更多干扰)。
最终,我不确定的一件事是如何从我的50个空间点中明智地创建网格网格,其二是如何使用CFD方法可视化速度场,而不管数据点的数量如何。
close all
rng default
t=0.1:0.1:10;
x = sin(t)';
y = cos(t)';
z = t.^0.2';
vx=y;vy=x;vz=z;
figure
subplot(2,3,1);
quiver3(x,y,z,vx,vy,vz);
hold on
streamribbon({ [x y z] }, {vx},{vy},{vz});
subplot(2,3,2);
[curl_val, cav] = curl([x,y,z],[vx,vy,vz]);
surfc([x,y,z],cav);
subplot(2,3,3);
surfc([x,y,z],curl_val);
w = sqrt( vx.^2 + vy.^2 + vz.^2 );
subplot(2,3,4);
quiver3(x,y,z,vx,vy,vz);
streamtube({ [x y z] }, {w});
subplot(2,3,5);
quiver3(x,y,z,vx,vy,vz);
subplot(2,3,6);
surfc([x,y,z],[vx,vy,vz]);
当我在real data上运行上述脚本(不包括数据生成)时,我得到以下图,这些图不是很有用:
最佳答案
我强烈怀疑这里的问题在于数据,而不是可视化技术。但总的来说,问题是以下一种或多种:
1)您没有足够的数据来捕获基本动态(空间中的动态以比您采样的频率更高的空间频率运行)
2)数据太杂乱,无法收集您收集的数据点数量。
3)流动从根本上说是湍流的,因此希望不会出现类似层流的图。
当您在可视化数据时遇到问题时,首要经验法则总是抛弃任何试图以任何方式近似导数(或梯度)的可视化。原因是,当您尝试用真实数据近似导数时,噪声几乎总是使该估计变得毫无意义。例如,假设我们的余弦因某些噪声而损坏,然后尝试从数据中数值估计导数
figure
% Create a signal
dt = .1;
t = 0:.1:10;
x = cos(t);
% Add some noise
y = x + .5 * randn(size(x));
% Compute the first order approximation of the derivatives of the signals
dx = diff(x)/dt;
dy = diff(y)/dt;
% Plot everything
subplot(2,1,1)
plot(t,x,t,y)
axis tight
subplot(2,1,2)
plot(t(2:end),dx,t(2:end),dy)
axis tight
在显示原始数据的第一个图中,噪声看起来并不坏,但是当我们查看导数估计时!哎呀,噪音真的被放大了。因此,无需考虑流的高阶特性(例如 curl 和涡度),而这些特性需要数据渐变。
那么在这种情况下我们该怎么办?好吧,基本上,只看原始数据即可。如果有模式,它将显示出来。例如,让我们从3个不同的角度来看一下原始速度矢量:
data = dlmread('data.csv','\s')
x = data(:,1);
y = data(:,2);
z = data(:,3);
vx = data(:,4);
vy = data(:,5);
vz = data(:,6);
close all
figure
subplot(1,3,1);
quiver3(x,y,z,vx,vy,vz);
view([1,0,0])
subplot(1,3,2);
quiver3(x,y,z,vx,vy,vz);
view([0,1,0])
subplot(1,3,3);
quiver3(x,y,z,vx,vy,vz);
view([0,0,1])
看起来甚至有些结构化的唯一东西是最后一个情节。但是,该图告诉我们,我们可能还需要应对湍流(除了噪声)。
具体来说,从 View 3来看,您似乎似乎正在紧紧捕获一个物体的流中进行速度测量。在这种情况下,您的测量结果可能太紧了……而且可能在边界层中。如果是这种情况(测量值在边界层中),则可以在流中获得随时间变化的效果,这意味着在没有时间分量的情况下查看任何内容都是没有意义的。您的答案中的“漂亮”图仅在层流时才真正有用,在这里我们可以看到这些漂亮的,一致的流线。如果它是湍流的,那么不管你看上去有多努力,流动中都没有可辨别的图案。
因此,总而言之,我认为您将无法找到很好的数据可视化效果,因为您使用的传感器太嘈杂,或者流量太湍流。
顺便说一句...考虑一下我们从您的“漂亮”数据集中看到原始速度矢量时会发生什么:
我的 friend ,那是训练有素的家养宠物。您手上有一只野山狮。
关于matlab - 如何分析和可视化3D速度场?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41948428/