jagers665 2024-10-12 21:39 采纳率: 0%
浏览 5
问题最晚将于10月20日00:00点结题

MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照

在使用动态模态分解DMD,本征正交分解POD分析流体机械三维流场的时候,将120个CFX的非定常模拟结果.trn文件在CFDPOST里转换为.cgns文件,再放入TECPLOT里导出带有X,Y,Z坐标及其上速度共六个变量的.dat文件作为快照,再放入MATLAB中运行DMD/POD代码。得到其模态能量分布及速度模态云图(.dat)
但模态云图出现错误,其中一块地方与其他地方速度有明显错误,查找后发现所有模态云图里的Z方向上的速度并未被处理,直接是最后一个流场快照上的Z方向速度,DMD/POD原理是将X,Y,Z方向上的速度整合成一个矩阵后进行奇异值分解(SVD),但我这个模态云图上的X,Y方向上的速度都已分解,唯独Z方向上速度没有
附其中一个快照数据截图(左)以及错误模态数据截图(右)和DMD代码


filename='.\';
n_snapshots    =120;
n0=2262;
nodenum=2461200;
elementnum=2332734;
for    j=1:n_snapshots    
    j
fid    =    fopen([num2str(n0+1*(j-1)),'.dat'],'r');
for l=1:24
     thead{l} = fgetl(fid); 
end
% data    =    fscanf(fid,'%lf    %lf    %lf    %lf',[4,inf]);
x    =    fscanf(fid,'%lf',[1,nodenum]);                        %    x    coordinate
y    =    fscanf(fid,'%lf',[1,nodenum]);                            %    y    coordinate
z    =    fscanf(fid,'%lf',[1,nodenum]);                            %    z    coordinate
U(j,:)    =    fscanf(fid,'%lf',[1,elementnum]);                    %    u    velocity
V(j,:)    =    fscanf(fid,'%lf',[1,elementnum]);                %    v    velocity
W(j,:)    =    fscanf(fid,'%lf',[1,elementnum]);                %    w    velocity
ic=0;
while ~feof(fid)
    ic=ic+1;
dataconectivity{ic}= fgetl(fid);
end
fclose(fid);
end
UV=[U,V,W];
GridNum    =    size(U,2);
% UV=UV-mean(UV,1);
[phi,mu,lamda,diags,x0]=DMD(UV','dt',0.00000909091*1);
[f,P]=DMD_spectrum(phi,mu,'plotit',1);
[Pm,ind]=sort(P,'descend');
fm=f(ind);
figure;plot(lamda,'o');hold on;plot(cos(0:2*pi/1000:2*pi),sin(0:2*pi/1000:2*pi),'r')
phisort=phi(:,ind);
 
mkdir('dmdmode');
for im=1:5
fid2=fopen(['dmdmode\',num2str(im),'thmode.dat'],'w');
for j=1:length(thead)
    fprintf(fid2,'%s\n',thead{j});
end
    fprintf(fid2,'%f %f %f %f %f\n',x);
      fprintf(fid2,'%f %f %f %f %f\n',y);
       fprintf(fid2,'%f %f %f %f %f\n',z);
        fprintf(fid2,'%f %f %f %f %f\n ',phisort(1:GridNum,im));
           fprintf(fid2,'%f %f %f %f %f\n',phisort((GridNum+1):2*GridNum,im));
           fprintf(fid2,'%f %f %f %f %f\n',phisort((2*GridNum+1):3*GridNum,im));
for j=1:length(dataconectivity)
fprintf(fid2,'%s\n',dataconectivity{j});
end
fclose(fid2);
end


img

img

img

  • 写回答

13条回答 默认 最新

  • 专家-司宇[在线] 2024-10-12 21:45
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    在MATLAB中使用动态模态分解(DMD)时遇到的问题和解决方法:

    1. 文件格式不匹配:首先,确保你的DMD文件与MATLAB的输出格式一致。如果两个工具对文件格式有不同的要求,请检查是否正确选择了相应的文件扩展名(TRN或CGNS)。例如,对于CFX模型,可能需要使用TRN文件格式;而对于MATLAB模型,则可能需要使用CGNS文件格式。

    2. 数据加载不完整:在处理DMD的结果之前,确保你已经加载了所有所需的参数(包括速度、密度等)。如果你使用的MATLAB版本支持,可以尝试从源文件加载这些参数。如果没有,可能需要重新加载整个模型并重置所有变量。

    3. 数据处理不当:DMD处理过程中可能会产生一些错误或噪声,导致结果不准确。这可能是由于模型的复杂性或者输入的数据量过大引起的。在这种情况下,你可以考虑使用更复杂的滤波器或增强算法来减少噪音,并且调整模型的参数,使其更加精确。

    4. 数据预处理:在DMD处理过程中,可能需要进行一些数据预处理操作,比如标准化、归一化等,以消除随机扰动的影响。

    5. 图形生成:在MATLAB中,你可以使用图形库如MATPLOTLIB或其他库来创建可视化图形。对于DMD的结果,你可以通过绘制二维或三维图来直观地展示其特征。

    6. 输出格式选择:不同的MATLAB版本支持不同的输出格式。例如,一些版本可能只支持CGNS格式。因此,在MATLAB中,你需要确定你希望输出哪种格式,以便更好地管理结果。

    7. 验证和优化:最后,确保你的DMD结果能够满足你的研究需求,并且没有引入新的误差来源。可以通过比较不同版本的结果来进行验证,或者使用其他研究领域的标准方法来优化你的结果。

    总之,DMD是一种强大的工具,但在使用前应该仔细评估其适用性和性能。在MATLAB中,遵循上述步骤是确保你的DMD结果可靠、准确的关键。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月12日

悬赏问题

  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验