首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分析和可视化三维速度场?

如何分析和可视化三维速度场?
EN

Stack Overflow用户
提问于 2017-01-31 09:41:48
回答 1查看 1.2K关注 0票数 5

我正在尝试使用Computational fluid dynamics领域的最佳实践技术来分析和可视化velocity field

给定6组运动粒子的位置和速度:分别为x,y,zvx,vy,vz

我想可视化和计算诱导速度场和它的性质,如:curldivergenceisosurfaces等。

下面是我可以在不调用meshgrid的情况下使用的volume visualization函数的一个简单脚本(以避免插值和更多的噪声)。

最终,我不确定的一件事是如何从我在空间中的50个点明智地创建网格,第二件事是如何使用CFD方法来可视化速度场,而不考虑少量的数据点。

代码语言:javascript
复制
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上运行上面的脚本(不包括数据生成)时,我得到了以下图表,它们的信息量不是很大:

EN

回答 1

Stack Overflow用户

发布于 2017-02-07 04:03:56

我强烈怀疑这里的问题出在数据上,而不是可视化技术上。但通常情况下,问题是以下一个或多个:

1)你没有足够的数据来捕捉潜在的动态(空间中的动态以比你采样更高的空间频率运行)

2)对于您收集的数据点数量来说,数据噪声太大。

3)流动从根本上是湍流的,因此不会希望出现漂亮的层流图形。

当您在可视化数据时遇到问题时,第一条经验法则总是丢弃任何试图以任何方式近似导数(或梯度)的可视化。原因是,当你试图用真实数据近似导数时,噪声几乎总是使这种估计变得毫无意义。例如,假设我们有一个被噪声破坏的余弦,我们尝试从数据中数值估计导数

代码语言:javascript
复制
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

在第一个图中,显示了原始数据,噪声看起来不是很糟糕,但当我们查看导数估计时!哦……噪音真的被放大了。因此,忘记流动的高阶属性,例如旋度和涡度,这需要数据的梯度。

那么在这样的情况下我们能做些什么呢?从本质上讲,只需查看原始数据。如果有一种模式,它会自己显露出来。例如,让我们从3个不同的角度来看看你的原始速度矢量:

代码语言:javascript
复制
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])

唯一看起来有点结构化的是最后一个情节。然而,该图告诉我们,我们可能还需要应对湍流(除了噪声)。

具体地说,从视图3看,你肯定是在一个紧紧拥抱着物体的流中进行速度测量。在这种情况下,你的尺寸可能太紧了。很可能在边界层。如果是这种情况(测量值在边界层中),那么您可以在流中获得随时间变化的效果,这意味着如果没有时间分量,查看任何东西都没有意义。只有当流动是层流的时候,你答案中的“漂亮”图才是真正有用的,我们可以看到这些漂亮的、一致的流线。如果它是湍流的,那么无论你多么努力地看,流动中都没有可辨别的模式。

因此,总而言之,我认为你无法为你的数据找到一个很好的可视化效果,因为你使用的传感器太嘈杂了,或者流动太乱了。

顺便说一句。考虑一下当我们查看您的“漂亮”数据集中的原始速度向量时会发生什么:

朋友,那是一只训练有素的家养宠物。你手上有只野生美洲狮。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41948428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档