热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

经验正交函数分解matlab,matlab物理场的正交分解

经验正交分解的原理简介经验正交函数分析方法(empiricalorthogonalfunction,缩写为EOF),也称特征向量分析(eigenvectoranaly

经验正交分解的原理

简介

经验正交函数分析方法(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”为例。

合理选择研究区域,时间范围等

f547a5eeb541b66ef6bc70d0343cc9de.png

选择合适数据下载后,认真核对数据基本信息

2c341803e3c2cb5bf55a39f444681bde.png

在数据下载页选择合适的数据格式,我们选择NetCDF

d74803e0e5c23fee2fef28582ab9fc6e.png

现在开始提取数据,提取的数据名为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;

477db024320cbecee3d0272721786449.png

(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(&#39;PC2&#39;,&#39;FontSize&#39;,18);

xlabel(&#39;Year&#39;,&#39;FontSize&#39;,18)

axis([1 612 -0.2 0.2]);

set(gca,&#39;xtick&#39;,25:12*5:576,&#39;xticklabel&#39;,{1960:5:2005},&#39;FontSize&#39;,14);

set(gca,&#39;tickdir&#39;,&#39;out&#39; ,&#39;LineWidth&#39;,1.5);

set(gca,&#39;Position&#39;,[0.075 0.125 0.875 0.15]);

box off

% EOF1

subplot(323)

plot(EOFs(:,1));

ylabel(&#39;PC1&#39;,&#39;FontSize&#39;,18);

axis([1 612 -0.2 0.2]);

set(gca,&#39;xtick&#39;,25:12*5:576,&#39;xticklabel&#39;,{},&#39;FontSize&#39;,14);

set(gca,&#39;tickdir&#39;,&#39;out&#39; ,&#39;LineWidth&#39;,1.5);

set(gca,&#39;Position&#39;,[0.075 0.3 0.875 0.15]);

box off

% EC2

subplot(322)

m_proj(&#39;Mercator&#39;,&#39;lat&#39;,[45 60],&#39;lon&#39;,[130 160]);

m_pcolor(lon(xx),lat(yy),EC(:,:,2)&#39;);

caxis([-1.0 2.5]) %设置颜色映射范围

shading interp;

m_coast(&#39;patch&#39;,[0.7 0.7 0.7]);

m_grid(&#39;linestyle&#39;,&#39;none&#39;,&#39;box&#39;,&#39;fancy&#39;,&#39;tickdir&#39;,&#39;out&#39;);

set(gca,&#39;Position&#39;,[0.5 0.5 0.45 0.4]);

title(&#39;EOF2&#39;,&#39;FontSize&#39;,18);

% EC1

subplot(321)

m_proj(&#39;Mercator&#39;,&#39;lat&#39;,[45 60],&#39;lon&#39;,[130 160]);

m_pcolor(lon(xx),lat(yy),EC(:,:,1)&#39;);

caxis([-1.0 2.5])

shading interp;

m_coast(&#39;patch&#39;,[0.7 0.7 0.7]);

m_grid(&#39;linestyle&#39;,&#39;none&#39;,&#39;box&#39;,&#39;fancy&#39;,&#39;tickdir&#39;,&#39;out&#39;);

set(gca,&#39;Position&#39;,[0.05 0.5 0.45 0.4]);

title(&#39;EOF1&#39;,&#39;FontSize&#39;,18);

% colorbar

h = colorbar;

caxis([-1.0 2.5])

set(h,&#39;position&#39;,[0.9,0.5,0.02,0.4])

set(h,&#39;ytick&#39;,-1.0:0.7:2.5,&#39;yticklabel&#39;,{-1.0:0.7:2.5})

结果图

975ed1b8411a1865d205709d50cd7bef.png



推荐阅读
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
author-avatar
两枚小瓶盖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有