<SVD方法>
EOF(or PCA):主要用于分析单个气象要素场的时空变化结构。奇异值分解SVD(Singular Value Decomposition)是一种矩阵分解方法,在气象领域中常用来分析两个气象场场之间的相关关系。能够找到成对出现的空间分布型,代表两场的相互联系着的空间结构。

SVD方法中几个特殊名词的概念

左场,右场:分别对应我们的要求的两个变量场,谁左谁右并不重要。
奇异向量:左场提取的模态称为左奇异向量,右场提取的模态为右奇异向量。
需要注意的是,各个场的奇异向量均为相互正交的。
模态:第一左奇异向量和第一右奇异向量及其各自的时间系数共同构成了SVD的第一模态,也可以叫第一对模态。
总体相关系数:指的是一对奇异向量对应的左右时间系数的相关系数,用来看左场第一模态和右场第一模态的相关性(总体相关系数是一个数)。
同性相关系数:表示原场和原场某一模态的时间序列的相关系数(为一个场),在一定程度上可以反应该变量的一个遥相关型。
异性相关系数:代表原场(比如左场)和对立场(比如右场)某个模态的时间序列的相关系数(为一个场),表是一个场对另一个场的影响关键区。











。。。。。。


完整文档见SVD在气象学的应用

NCL的函数库中与SVD相关的函数包括svd_lapack,svdcov,svdcov_sv,svdstd,svdstd_sv

svd_lapack

用于计算一般矩形矩阵的奇异值分解。具体写法为:
s   = svd_lapack (a, "S" , "S", 0,  u, v)
这里,a是一个(/nca,nra/)矩阵,两个“S”为固定写法,0表示输出v时不转置(1则表示转置v),
u和v 分别为左、右奇异向量,u的长度和属性都和a相同,而v的长度为(/nca,nca/),属性也与a相同。

svdcov

对两个场进行奇异值分解,并返回与这两个场相关的左右同构和异构数组。具体写法为:
svd_rv = svdcov(s,z,nsvd,homlft,hetlft,homrgt,hetrgt)
这里,s为(/ncols,ntime/)的气象场,z为(/ncolz,ntime/), 二者都为float或者double。     
nsvd为计算的svd模态数。homlft,hetlft,homrgt,hetrgt分别为左同构场、左异构场、右同构场合右异构场。
它们的属性如下:
        homlft:(/nsvd,ncols/),typeof(s)  
        hetlft:(/nsvd,ncols/),typeof(s)
        homrgt:((/nsvd,ncolz/),typeof(s)
        hetrgt:((/nsvd,ncolz/),typeof(s)
时间系数为:
        ak   = onedtond(svd_rv@ak,(/nsvd,ntime/)) 
        bk   = onedtond(svd_rv@bk,(/nsvd,ntime/))  
        ak!0 = "sv"  
        ak!1 = "time"  
        bk!0 = "sv"  
        bk!1 = "time"

svdcov_sv

该命令与svdcov的区别在于,它只返回两个输入数据集相关联的左右奇异向量。

svdstd、svdstd_sv

它们与svdcov、svdcov_sv的区别在于,它们首先对输入的数组进行了标准化处理,然后再进行SVD计算,而svdcov、svdcov_sv不会对输入的数据进行标准化处理。

✍️奇异值分解原理讲解