matlab画三维流场

现有一三维网格
xx = linspace(-0.166,0.166,100); %对X坐标进行线性插值,形成1乘100的行向量
yy = linspace(-0.001,0.818,100); %对Y坐标进行线性插值,形成1乘100的行向量
zz = linspace(-0.166,0.166,100);
nx = length(xx);
ny = length(yy);
nz = length(zz);
[x,y,z] = meshgrid(xx,yy,zz);% 100乘100乘100

以及新的物理量(涡量)
wo_new=griddata(fluent_data(:,1),fluent_data(:,2),fluent_data(:,3),recon_wo,x,y,z);%将重构的涡量拟合到新的坐标系,100×100×100。(fluent_data是2009551*4的矩阵)

这里得到的涡量wo_new是100乘100乘100的矩阵

想得到类似于以下三维流场 想知道怎么写 用哪个绘图函数才能实现 谢谢

img

该回答引用ChatGPT
要画出三维流场,可以使用Matlab中的isosurface函数。该函数可以根据给定的等值面值,绘制出三维数据的等值面。以下是具体的代码实现:
matlab
% 绘制等值面
figure;
isosurface(x,y,z,wo_new,0.1);
axis equal;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('三维流场');

其中,x、y、z是网格坐标,wo_new是涡量数据,0.1是等值面的值。可以根据需要调整等值面的值,以得到更好的效果。
另外,为了更好地显示流场,可以使用Matlab中的camlight函数和lighting函数,调整光照效果。具体代码如下:
matlab
% 调整光照效果
camlight('headlight');
lighting gouraud;

最终的效果如下图所示:
![三维流场](https://img-blog.csdn.net/20180531163412909?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N0YXRpYy9pbWFnZXMvYmFzaWNfc2VhcmNo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/80)

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
要绘制三维流场,可以使用Matlab中的函数quiver3或streamline。

对于quiver3函数,你需要提供用于绘制箭头的向量。这些向量可以使用x、y和z中的值表示位置,并且可以使用wo_new表示速度或流量(或任何其他物理量)。以下是一个简单的示例:

quiver3(x,y,z,wo_new,wo_new,wo_new);

对于streamline函数,你需要提供一个速度向量场。你可以使用wo_new计算速度向量场,如下所示:

[dx,dy,dz] = gradient(wo_new);
streamline(x,y,z,-dx,-dy,-dz,[],[],[0.5,50]);

这将绘制从0.5到50范围内的几条流线。

注意:在使用quiver3和streamline函数时,数据必须是向量场,即第四、五和六个参数必须是沿x、y和z方向的速度分量。

以下是一个完整的示例代码:

% 生成坐标网格
xx = linspace(-0.166,0.166,100);
yy = linspace(-0.001,0.818,100);
zz = linspace(-0.166,0.166,100);
[x,y,z] = meshgrid(xx,yy,zz);

% 计算速度向量场
wo_new = rand(size(x)); % 此处使用随机数据代替
[dx,dy,dz] = gradient(wo_new);

% 绘制流线
figure;
streamline(x,y,z,-dx,-dy,-dz,[],[],[0.5,50]);

运行这个示例应该会显示一个三维流场的图像。你可以根据需要调整数据和参数以获得更符合你需求的图像。
如果我的回答解决了您的问题,请采纳!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/797212
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:matlab 简单实现z字扫描
  • 除此之外, 这篇博客: matlab简单分析频域滤波和时域滤波中的 数字时域滤波器——关键得到Z变换形式的滤波器 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    • 数字差分——简单的高通滤波器
      x′(n)≈x(n+1)−x(n−1)2Δt⇒H(z)=az1−az−1,a=12Δtx'(n)\approx\frac{x(n+1)-x(n-1)}{2\Delta t}\Rightarrow H(z)=az^1-az^{-1},a = \frac{1}{2\Delta t}x(n)2Δtx(n+1)x(n1)H(z)=az1az1,a=2Δt1
    a = 1/(2*dt);
    For K = 1 To N-1
    	x(k) = a*x(k+1)-a*x(k-1)
    Next
    

    在这里插入图片描述

    Fs = 5000;
    dt = 1/Fs;
    T = 1;
    N = T/dt;
    t = linspace(0,T,N);
    a = 5;
    f = 2;
    y = a*sin(2*pi*f*t)+0.3*sin(2*pi*50*t);
    subplot(211)
    plot(t,y);
    x(N) = 0;
    for i = 2:N-1
    	x(i) = (y(i+1)-y(i-1))/2;
    end
    subplot(212)
    plot(t,x);
    
    • 数据平滑——简单的低通滤波器
      在这里插入图片描述
    Fs = 5000;
    dt = 1/Fs;
    T = 1;
    N = T/dt;
    t = linspace(0,T,N);
    a = 5;
    f = 2;
    y = a*sin(2*pi*f*t)+0.8*sin(2*pi*500*t);
    subplot(211)
    plot(t,y);
    x = y;
    for i = 1:N-5
    	x(i) = (y(i)+y(i+1)+y(i+2)+y(i+3)+y(i+4))/5;
    end
    subplot(212)
    plot(t,x);
    

    在这里插入图片描述

    • 高斯平滑滤波器——将系数改进,中间值权重最大
      在这里插入图片描述
    • 数字滤波器设计——求取滤波器系数
      • 时域数字滤波就是将信号和滤波器的单位脉冲响应 (Z域滤波器系数) 进行卷积分,寻找所需的滤波器的单位脉冲响应的过程称为滤波器设计,信号卷积分过程称为滤波
        在这里插入图片描述
    • 注意对滤波器起始点进行处理
      在这里插入图片描述

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^