经验正交分解原理
个人资料
经验函数分析方法(empirical orthogonal function,简称EOF )、特征向量分析(eigen vector analysis )或主成分分析(principal component analysis,简称PCC )
所分析的常规特征向量对应于空间样本,其被称为空间特征向量或空间模式; 对应的是时间变化称为时间系数。
特长
(1)主要特色:能有效表达物理场的主要信息,保留次要信息,排除外来随机干扰。
)2)没有固定的函数形式)该正交函数展开没有像三角函数展开、球函数展开那样固定的展开形式。
)3)图形是由场本身决定的,而不是事先人为地给出典型的场函数。
)4)具有收敛快、能很好地反应出场的基本结构的特征。
主要APP应用
)1)综合分析空间不同站点/同一点不同时间、不同高度的多个因素(可在有限区域不规则分布的站点进行)。
)2)可用于要素场分析、竖向结构分析、动力模型竖向分层等。
基本思想
经验正交函数分解的基本思想是包含m个空间点(或p个变量)的n个时间序列的观测场的序列(I=1,2,m; j=1,2,…,n )被分解为相互正交的时间函数和相互正交的空间函数的积之和,在典型空间函数的情况下,大多把时间函数看作典型情况下的加权系数。 不同时间的要素场是几个典型场被不同权重线性叠加的结果,各场之间的差将导致各典型场的系数不同。
$$ nXm=nEm times mPhi_{m}^{T} $$
EOF函数概述
EOF函数的原型如下。
$$ [V,EOFs,EC,error]=eof(d,p ) $$
本站提供的下载:EOF.m
输入参数
d :输入的物理场数据为二维矩阵,假设每行为样本,各列为变量。 因此,d列表示时间序列变量。
p :可选。 EOF分析结果的模态数必须小于时间间隔和样本数
输出参数
v )关于EOFs的特征向量;
EOFs :时间系数;
EC )由p个特征值列向量组成的矩阵;
error :重构误差;
经验正交分解示例
下载数据
将数据下载到soda : simpleoceandatassimilation
选择相关变量,以" TAUY "为例。
合理选择研究区域、时间范围等
选择合适的数据下载后,仔细核对数据的基本信息
在数据下载页面上,选择适当的数据格式,然后选择NetCDF
现在开始提取数据。 提取的数据名称为data.cdf
建议根据下载的数据变量名、范围、时间等进行命名。 很容易找。 例如,tauy_1958_2008_NWPacific.cdf
数据读取1
2
3
4
5
6
7
8 % %读数据
file=' tauy _ 1958 _ 2008 _ NW Pacific.CDF ';
% NC disp (文件);
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图形; 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
1xx=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 gxdwx = 1:length(yy)
tauy_de(ii,gxdwx,:) = detrend(squeeze(tauy_sub(ii,gxdwx,:)));
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})
结果图