经验正交函数分解matlab,matlab物理场的正交分解
经验正交分解的原理
简介
经验正交函数分析方法(empirical orthogonal function,缩写为EOF),也称特征向量分析(eigen vector analysis),或者主成分分析(principal component analysis,缩写PCA),是一种分析矩阵数据中的结构特征,提取主要数据特征量的一种方法。Lorenz在1950年代首次将其引入气象和气候研究,现在在地学及其他学科中得到了非常广泛的应用。
分析中通常特征向量对应的是空间样本,称空间特征向量或者空间模态;对应的是时间变化称为时间系数。
特点
(1)主要特色:能够有效地体现物理场的主要信息,保留次要信息并排除外来的随机干扰。
(2)无固定的函数形式:这种正交函数展开不像三角函数展开、球函数展开那样有固定的展开形式。
(3)图形是由场本身决定的,不是事先人为地给定典型场函数的。
(4)具有收敛快、能更好地反应出场的基本结构的特征。
主要应用
(1)可在有限的区域中不规则分布的站点进行:空间不同站点/同一点的不同时间、不同高度的多种要素进行综合分析。
(2)可用于要素场分析、垂直结构分析、动力模型垂直分层等。
基本思想
经验正交函数分解的基本思想是把包含m个空间点(或p个变量)的n个时次的观测场的序列(i = 1,2,…,m; j = 1,2,…,n)分解成相互正交的时间函数与相互正交的空间函数的乘积之和,常把空间函数看做典型场,时间函数看做典型场的权重系数,则不同时间的要素场是若干个典型场按不同的权重线性叠加的结果,各个场之间的差别就在于各典型场的系数不同。
$$ nXm = nEm \times m\Phi_{m}^{T} $$
EOF函数简介
EOF函数的原型为:
$$ [V,EOFs,EC,error]=EOF(D,p) $$
本站提供的下载:EOF.m
输入参数
D:输入的物理场数据,为一个二维矩阵,每一行假定为一个样本,每一列为一个变量。因此D的一列表示一个时间序列的变量。
P:可选项,指EOF分析结果的模态数,其取值应小于时间间隔和样本数
输出参数
V:与EOFs有关的特征向量;
EOFs:时间系数;
EC:空间模态,由p个模态的列向量组成的矩阵;
error:重建误差;
经验正交分解实例
数据下载
前往SODA: Simple Ocean Data Assimilation下载数据
选择相关变量,以“TAUY”为例。
合理选择研究区域,时间范围等
选择合适数据下载后,认真核对数据基本信息
在数据下载页选择合适的数据格式,我们选择NetCDF
现在开始提取数据,提取的数据名为data.cdf
建议根据下载的数据变量名、范围、时间等命名,便于查找。如tauy_1958_2008_NWPacific.cdf
数据读取1
2
3
4
5
6
7
8%% read data
file = 'tauy_1958_2008_NWPacific.cdf';
% ncdisp(file);
time = ncread(file,'time');
lon = ncread(file,'lon');
lat = ncread(file,'lat');
tauy = ncread(file,'tauy');
missing_value = ncreadatt(file,'tauy','missing_value');
数据预处理
(1)显示数据的范围
使用m_map工具箱进行地图的显示:
1>> figure;m_proj('mercator','lat',[20 60],'lon',[100 160]);m_coast('patch',[0.7 0.7 0.7]);m_grid;
(2)选择海区
1
2
3% set range
la = 46:59;
lo = 145:155;
(3)去趋势处理
1
2
3
4
5
6
7
8
9
10
11xx = find(lon>=min(lo) & lon<=max(lo) );
yy = find(lat>=min(la) & lat<=max(la));
tauy_sub = zeros(length(xx),length(yy),612);
tauy_sub = tauy(xx,yy,:)
%% detrend
tauy_de = zeros(size(tauy_sub));
for ii = 1:length(xx)
for jj = 1:length(yy)
tauy_de(ii,jj,:) = detrend(squeeze(tauy_sub(ii,jj,:)));
end
end
EOF计算1
2
3
4%% EOF
tauy_de = reshape(tauy_de,length(xx)*length(yy),612);
[V,EOFs,EC,error] = EOF(tauy_de,10);
EC = reshape(EC,length(xx),length(yy),10);
计算方差贡献率1V = [2.3544 0.1429 0.0625 0.0410 0.0305 0.0085 0.0077 0.0073 0.0024 0.0021]
计算各模态的方差贡献率:
1
2>> V/sum(V)
ans =[0.8853 0.0537 0.0235 0.0154 0.0115 0.0032 0.0029 0.0028 0.0009 0.0008]
绘图
根据方差贡献率,画出方差贡献率大于90%的前若干个模态的空间模态和时间系数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49%% figure
figure;
% EOF2
plot(EOFs(:,2));
ylabel('PC2','FontSize',18);
xlabel('Year','FontSize',18)
axis([1 612 -0.2 0.2]);
set(gca,'xtick',25:12*5:576,'xticklabel',{1960:5:2005},'FontSize',14);
set(gca,'tickdir','out' ,'LineWidth',1.5);
set(gca,'Position',[0.075 0.125 0.875 0.15]);
box off
% EOF1
subplot(323)
plot(EOFs(:,1));
ylabel('PC1','FontSize',18);
axis([1 612 -0.2 0.2]);
set(gca,'xtick',25:12*5:576,'xticklabel',{},'FontSize',14);
set(gca,'tickdir','out' ,'LineWidth',1.5);
set(gca,'Position',[0.075 0.3 0.875 0.15]);
box off
% EC2
subplot(322)
m_proj('Mercator','lat',[45 60],'lon',[130 160]);
m_pcolor(lon(xx),lat(yy),EC(:,:,2)');
caxis([-1.0 2.5]) %设置颜色映射范围
shading interp;
m_coast('patch',[0.7 0.7 0.7]);
m_grid('linestyle','none','box','fancy','tickdir','out');
set(gca,'Position',[0.5 0.5 0.45 0.4]);
title('EOF2','FontSize',18);
% EC1
subplot(321)
m_proj('Mercator','lat',[45 60],'lon',[130 160]);
m_pcolor(lon(xx),lat(yy),EC(:,:,1)');
caxis([-1.0 2.5])
shading interp;
m_coast('patch',[0.7 0.7 0.7]);
m_grid('linestyle','none','box','fancy','tickdir','out');
set(gca,'Position',[0.05 0.5 0.45 0.4]);
title('EOF1','FontSize',18);
% colorbar
h = colorbar;
caxis([-1.0 2.5])
set(h,'position',[0.9,0.5,0.02,0.4])
set(h,'ytick',-1.0:0.7:2.5,'yticklabel',{-1.0:0.7:2.5})
结果图
经验正交函数分解matlab,matlab物理场的正交分解相关推荐
- CEEMDAN:完全噪声辅助聚合经验模态分解(matlab)——学习笔记3
CEEMDAN:完全噪声辅助聚合经验模态分解--学习笔记3 从EMD到CEEMDAN 1.EMD EMD算法将基于原始信号的局部特征时间尺度,将原始信号分解为特征模态函数,即将其分解为从高频到低频的一 ...
- 数据变换分解 | Python实现EOF经验正交函数分解时间序列模态分析
时间序列分析 | Python实现EOF时间序列模态分析 目录 时间序列分析 | Python实现EOF时间序列模态分析 基本介绍 程序设计 学习小结 基本介绍 EOF分析只是以方差对应的基对数据进行 ...
- 经验模式分解(EMD)——简介及Matlab工具箱安装
最近在做脑电信号分析,在导师的建议下学习了一点经验模式分解(下面简称EMD)的皮毛,期间也是遇到了很多问题,在这里整理出来,一是为了自己备忘,二是为了能尽量帮到有需要的朋友. 一.EMD简介 经验模态 ...
- 克劳特法matlab,经验模式分解matlab
EMD分解的matlab程序 %此版本为 ALAN 版本的整合注释版 function imf = emd(x...(x1) %当标准偏差系数 sd 大于 0.1 或 x1 不是固有模态函数时,分量终 ...
- lmd matlab 信号处理程序,LMD经验模态分解matlab程序.doc
LMD经验模态分解matlab程序 LMD经验模态分解matlab程序--原味的 曾经也用滑动平均写过LMD,其实滑动平均的EMD才是原汁原味的居于均值分解. 分享给有需要的人,程序写的不好,只是希望 ...
- 经验模式分解(EMD)的MATLAB工具箱安装详解
经验模式分解(EMD)的MATLAB工具箱安装详解 MATLAB工具箱安装 时频分析工具箱 安装EMD工具箱 代码检验是否安装成功 MATLAB工具箱安装 首先,本文参考CSDN这篇文章https:/ ...
- 经验模式分解(EMD)及希尔伯特-黄变换(HHT)简介及matlab实现
本文介绍过程涉及到两个链接工具包,可以自己网上搜索下载,以下提供了网盘下载的地址,因为作者主要做语音方面工作,所以后面的说明主要以说话人识别为例.(链接:https://pan.baidu.com/s ...
- matlab求矩阵距平矩阵,matlab经验正交函数EOF(转载)
A.7EOF分析 经验正交函数分析方法(empiricalorthogonalfunction,缩写为EOF),也称特征向量分析(eigenvectoranalysis),或者主成分分析(princi ...
- 线谱法 时钟分量的提取 matlab,LMD局域均值分解的matlab程序及示例
说明:研究LMD局域均值分解有3个月左右,能找到的相关文章也基本上看了一遍,觉得是个很好的方法,号称是EMD经验模态分解的改进版.但是网络上一直没有找到该算法的matlab程序,只见文章说的天花乱坠. ...
最新文章
- 几种常见的模式识别算法
- Linux拷贝排除一个或多个目录的实现方法
- 电子称重管理计算机,称重管理系统
- 一个与神经网络分类特征旋转不变性有关的实验
- android 分组柱状图_整理了一个 android 上的波形图及柱状图绘制控件
- vue 固定div 滚动_vue移动端 导航吸顶(固定定位)页面滚动出现抖动
- 《大数据分析原理与实践》一一第3章 关联分析模型
- 巧用 Nginx 快速实现 HTTPS 双向认证
- 内部曝料——博文年会之《武林外传》
- 递归+分治+贪心+动态规划
- html中单双引号镶嵌
- 阿里云短信通道被人恶意刷了几万条短信,怎么办?(短信接口被盗刷系列3)
- 【day13】【洛谷算法题】-P5713洛谷团队系统-刷题反思集[入门2分支结构]
- win8运行matlab7.0,Win8.1系统中matlab7.0不兼容的解决方法
- 高盐废水如何处理,离子交换树脂在高盐废水中的应用
- oracle 每3位加逗号,[DB][Oracle]Oracle格式化数字的方法(指定小数点位数,每3位加逗号)...
- 世界女性科技群落(四):技术与流行文化顶格发展,日韩女性的科技暗面
- AndroidStudio gradle 7.0+配置说明
- 隔磁片在无线充线圈中的作用
- 解决无效驱动器的问题
热门文章
- shiro学习笔记(三)知识整合
- 45个网页中充满创意的字体排版
- 归一化函数normalize详解
- 已解决yolov5报错RuntimeError: CUDA out of memory. Tried to allocate 14.00 MiB
- Addressing Function Approximation Error in Actor-Critic Methods
- MATLAB中的prod函数
- 【调剂】西安工业大学-陕西科技大学 课题组招收考研调剂生,欢迎报考光学工程、电子信息,光学等方向通信调剂...
- matlab ar谱分析,用MATLAB进行AR模型功率谱分析
- C++ 数字三角形(动态规划)
- FTP服务器可以存储网络文件吗,nas存储怎么做ftp服务器