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

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 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么