tudoumama2018 2023-03-03 15:21 采纳率: 43.8%
浏览 114
已结题

matlab重构三维流场

matlab重构流场,前面没问题 到了figure的时候出问题 显示

img

%这一节程序的目的:重构某一个原始的瞬态流场,_**并且将速度场数据拟合到规整的网格中。然后做平面云图**_。
n_recon = input('重构的流场是第几个:');%程序运行至此,需要人为在命令行窗口输入重构的流场是第几个
at=zeros(r,1);% 时间系数矩阵, r * 1
for j = 1:r
   at(j,1)=dot(X_fluc(:,n_recon),POD_vector(:,n_snapshots-j+1));%计算时间系数,r*1的矩阵
end
X_reconstruct=zeros(6028500,1);
for j=1:3 %用前50个能量贡献较大的POD模态重构瞬态速度场,这里的50可以改成100,200,500等任意数
  X_reconstruct = X_reconstruct+at(j,1)*POD_vector(:,n_snapshots-j+1);%308400*1
end
recon_u = X_reconstruct(1:2009500,1);%重构以后的速度U
recon_v = X_reconstruct((2009500+1):(2*2009500),1);%重构以后的速度V
recon_w = X_reconstruct((2009500*2+1):(3*2009500),1);%重构以后的速度W

xx = linspace( -0.0787 , 0.0787 , 100 );%对X坐标进行线性插值,形成1*100的行向量
yy = linspace( -0.0787 , 0.0787 , 100 );%对Y坐标进行线性插值,形成1*100的行向量
zz = linspace( -0.001 , 0.818 , 100 );%对Z坐标进行线性插值,形成1*100的行向量
nx = length(xx);
ny = length(yy);
nz = length(zz);
[x,y,z] = meshgrid(xx,yy,zz);% 100*100*100
u_new=griddata(fluent_data(:,1),fluent_data(:,2),fluent_data(:,3),recon_u,x,y,z);%将重构的速度U拟合到新的坐标系,100*100*100
v_new=griddata(fluent_data(:,1),fluent_data(:,2),fluent_data(:,3),recon_v,x,y,z);%将重构的速度V拟合到新的坐标系,100*100*100
w_new=griddata(fluent_data(:,1),fluent_data(:,2),fluent_data(:,3),recon_w,x,y,z);%将重构的速度W拟合到新的坐标系,100*100*100
u_new(isinf(u_new)) = 0;%如果值为无穷大,则赋值为0
u_new(isnan(u_new)) = 0;%如果非数值,则赋值为0
v_new(isinf(v_new)) = 0;
v_new(isnan(v_new)) = 0;
w_new(isinf(w_new)) = 0;
w_new(isnan(w_new)) = 0;
figure;
contourf(x,y,u_new,v_new);

figure;
contourf(y,z,v_new,w_new);

figure;
contourf(x,z,u_new,w_new);

但是总会报错 不知道怎么办了 目的是 将速度场数据拟合到规整的网格中。然后做平面云图

  • 写回答

6条回答 默认 最新

  • 实相无相 2023-03-03 17:54
    关注

    我发现你的问题可能是因为你的输入参数 x,y,u_new,v_new 等都是三维矩阵,而 contourf 函数只能接受二维矩阵作为输入。你需要将三维矩阵切片成二维矩阵,然后再用 contourf 函数绘制等高线图。

    例如,如果你想在 x-y 平面上绘制 u_new 和 v_new 的等高线图,你可以用以下代码:

    % 假设 z 是一个 1001 的向量,表示 z 轴上的坐标
    % 选择一个 z 坐标作为切片平面,比如 z(50)
    % 找到对应的 u_new 和 v_new 的切片矩阵
    u_slice = squeeze(u_new(:,:,50)); % 100
    100 的二维矩阵
    v_slice = squeeze(v_new(:,:,50)); % 100*100 的二维矩阵
    % 绘制等高线图
    figure;
    contourf(x,y,u_slice,v_slice);
    类似地,如果你想在 y-z 平面或 x-z 平面上绘制等高线图,你也可以用相同的方法切片。

    希望这些信息能帮助你解决问题,祝你编程愉快!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月18日
  • 已采纳回答 3月10日
  • 修改了问题 3月3日
  • 创建了问题 3月3日

悬赏问题

  • ¥15 YOLOv5在进行trainpy训练后为什么会出现这种情况(语言-python)
  • ¥15 关于远程桌面的鼠标位置转换
  • ¥15 MATLAB和mosek的求解问题
  • ¥20 修改中兴光猫sn的时候提示失败
  • ¥15 java大作业爬取网页
  • ¥15 怎么获取欧易的btc永续合约和交割合约的5m级的历史数据用来回测套利策略?
  • ¥15 有没有办法利用libusb读取usb设备数据
  • ¥15 为什么openeluer里面按不了python3呢?
  • ¥15 关于#matlab#的问题:训练序列与输入层维度不一样
  • ¥15 关于Ubuntu20.04.3LTS遇到的问题:在安装完CUDA驱动后,电脑会进入卡死的情况,但可以通过键盘按键进入安全重启,但重启完又会进入该情况!