• 大小: 5KB
    文件类型: .m
    金币: 2
    下载: 2 次
    发布日期: 2021-07-01
  • 语言: Matlab
  • 标签: POD  DMD  matlab  

资源简介

进行模态分析的MATLAB程序,包括本征正交分解和动态模态分解

资源截图

代码片段和文件信息

clear;clf

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Higham J.E. Brevis W & Keylock C.J. (2018) 
% Implications of the selection of a particular modal decomposition technique for the analysis of shallow flows 
% Journal of Hydraulic Research
% Taylor and Francis
% 10.1080/00221686.2017.1419990 
% Any questions email jonny.e.higham@gmail.com

%%%%%%%%%%%%%%%%%%% USAGE %%%%%%%%%%%%%%%%%%%%%%

% When the data is input the POD modes will be calculated after which you
% are promped with a window to choose the frequency highlighted in the
% particular POD mode which you would like the DMD algorithm to extract. 

%%%%%%%%%%%%%%%%%% EXAMPLES %%%%%%%%%%%%%%%%%%%%

% Here we provide two examples ‘cylinder‘ & ‘groyne‘ change by either using
% ‘cylinder‘ or ‘groyne‘;
% Chose the cylinder example for one velocity component and the groyne for
% two velocity components (this can easily be extended to three components

%%%%%%%%%%%%%%%%%%  INPUT  %%%%%%%%%%%%%%%%%%%%%

freq = 5; %Hz; aquisition frequency
example = ‘cylinder‘; % input case (cylinder / groyne) 
mode=2; % which mode to plot and extract DMD from

%%%%%%%%%%%%%%%%%%% script %%%%%%%%%%%%%%%%%%%%%

% Import the images from folder. The colour images are converted to
% grayscale. 
data = [];
if strcmp(example‘cylinder‘)
    directory = ‘data_cylinder‘;
    count = 1;
    while exist(sprintf(‘%s/B_%0.4d.bmp‘directorycount)) ~= 0    % exist 检验变量或文件是否存在  sprintf 格式化输出
        data(::count) = imread(sprintf(‘%s/B_%0.4d.bmp‘directorycount)); % imread 图像读入
        count = count +1;
    end

    r = size(data1); c = size(data2);
    % Transform the data into column vectors.
    data=reshape(datar*csize(data3));    %  data 重构出 r*c X size(data3)的 矩阵
end
if strcmp(example‘groynes‘)
    directory = ‘data_groynes‘;
    count = 1;
    while exist(sprintf(‘%s/PIV_%0.4d.mat‘directorycount)) ~= 0
        load(sprintf(‘%s/PIV_%0.4d.mat‘directorycount))
        data_u(::count) = u;
        data_v(::count) = v;
        count = count +1;
    end
    r = size(data_u1); c = size(data_u2);
    % Transform the data into column vectors.
    data=[reshape(data_ur*csize(data_u3));reshape(data_vr*csize(data_v3))];
end

%%%%%%%%%%%%%%%%%%% POD %%%%%%%%%%%%%%%%%%%%%%

% Perform the POD - this is mean subtracted for POD not for DMD
[Phi ~ C]=svd(data-repmat(mean(data2) [1 size(data2)])‘econ‘);  % repmat 复制平铺矩阵  mean(data2)为行平均的列向量
                                                                      % 奇异值分解(精简分解)
            

评论

共有 条评论