经验正交分解的原理

简介

经验正交函数分析方法(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物理场的正交分解相关推荐

  1. CEEMDAN:完全噪声辅助聚合经验模态分解(matlab)——学习笔记3

    CEEMDAN:完全噪声辅助聚合经验模态分解--学习笔记3 从EMD到CEEMDAN 1.EMD EMD算法将基于原始信号的局部特征时间尺度,将原始信号分解为特征模态函数,即将其分解为从高频到低频的一 ...

  2. 数据变换分解 | Python实现EOF经验正交函数分解时间序列模态分析

    时间序列分析 | Python实现EOF时间序列模态分析 目录 时间序列分析 | Python实现EOF时间序列模态分析 基本介绍 程序设计 学习小结 基本介绍 EOF分析只是以方差对应的基对数据进行 ...

  3. 经验模式分解(EMD)——简介及Matlab工具箱安装

    最近在做脑电信号分析,在导师的建议下学习了一点经验模式分解(下面简称EMD)的皮毛,期间也是遇到了很多问题,在这里整理出来,一是为了自己备忘,二是为了能尽量帮到有需要的朋友. 一.EMD简介 经验模态 ...

  4. 克劳特法matlab,经验模式分解matlab

    EMD分解的matlab程序 %此版本为 ALAN 版本的整合注释版 function imf = emd(x...(x1) %当标准偏差系数 sd 大于 0.1 或 x1 不是固有模态函数时,分量终 ...

  5. lmd matlab 信号处理程序,LMD经验模态分解matlab程序.doc

    LMD经验模态分解matlab程序 LMD经验模态分解matlab程序--原味的 曾经也用滑动平均写过LMD,其实滑动平均的EMD才是原汁原味的居于均值分解. 分享给有需要的人,程序写的不好,只是希望 ...

  6. 经验模式分解(EMD)的MATLAB工具箱安装详解

    经验模式分解(EMD)的MATLAB工具箱安装详解 MATLAB工具箱安装 时频分析工具箱 安装EMD工具箱 代码检验是否安装成功 MATLAB工具箱安装 首先,本文参考CSDN这篇文章https:/ ...

  7. 经验模式分解(EMD)及希尔伯特-黄变换(HHT)简介及matlab实现

    本文介绍过程涉及到两个链接工具包,可以自己网上搜索下载,以下提供了网盘下载的地址,因为作者主要做语音方面工作,所以后面的说明主要以说话人识别为例.(链接:https://pan.baidu.com/s ...

  8. matlab求矩阵距平矩阵,matlab经验正交函数EOF(转载)

    A.7EOF分析 经验正交函数分析方法(empiricalorthogonalfunction,缩写为EOF),也称特征向量分析(eigenvectoranalysis),或者主成分分析(princi ...

  9. 线谱法 时钟分量的提取 matlab,LMD局域均值分解的matlab程序及示例

    说明:研究LMD局域均值分解有3个月左右,能找到的相关文章也基本上看了一遍,觉得是个很好的方法,号称是EMD经验模态分解的改进版.但是网络上一直没有找到该算法的matlab程序,只见文章说的天花乱坠. ...

最新文章

  1. SpringBoot与SpringMVC的区别是什么?
  2. linux常用的命令行
  3. php根据id查找条件怎么写_thinkphp where()条件查询
  4. c语言define定义全局变量,webpack中使用DefinePlugin定义全局变量
  5. 如何知道linux的ssh秘钥是否匹配,SSH密钥验证
  6. KGPolicy:用于推荐的负采样模型(知识图谱策略网络)WWW 2020
  7. request 和 session 获取方法
  8. 学子商城项目用springboot后端框架搭建(IDEA)
  9. IntelliJ IDEA如何 导入、导出 设置
  10. 京东2019校园招聘测试开发工程师面试经历
  11. linux cpan 参数配置,Perl学习笔记之CPAN使用介绍
  12. 数据管理平台系列之Zeppline安装与使用
  13. ESP32 入门笔记05: BLE 蓝牙客户端和服务器 (ESP32 for Arduino IDE)
  14. 多元函数的泰勒级数展开公式
  15. 英语老师唱歌软件测试,【出彩教育人】课上打电话,课下能K歌,这样的英语课给我来一打!...
  16. python和c 情侣网名_可爱超萌的情侣网名 超可爱的情侣网名
  17. 树莓派学习笔记(5):成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)
  18. ttyLinux安装完整指南
  19. 【计算机组成原理】Cache缓存:高速缓冲存储器
  20. C++ 和 EasyX绘制心形代码

热门文章

  1. 记录下编译u-boot提示错误:stdio.c:252: undefined reference to `serial_putc'的处理
  2. 解决php7无法加载curl的问题及反思
  3. 青创智通——GET!常见测量工具的使用方法分享
  4. VC封装Ping命令的实现
  5. Git报错解决——insufficient permission for adding an object to repository database
  6. 内容提供者ContentProvider, 读写加联系人,读写通话记录,监听收到的短信,获取之前已经收到的短信
  7. HTML零基础快速入门(详细教程)
  8. 实现自己的operator new和operator delete以及实现一个简单的内存池管理类
  9. 女神节, 数说奥斯卡女神们 : “惊艳了时光 , 温柔了岁月”
  10. unity打包webgl报错及处理 IL2cpp/build/unityLinker.exe not run properly;IL2cpp.exe not run properly