气象统计分析报告与预报经验正交函数分解.docx
气象统计分析报告与预报经验正交函数分解 实验二 经验正交函数分解 一、目的和要求: 经验正交函数分解(EOF )是统计天气分析中气象要素场最基础的研究模型,是必须理解和掌握的方法之一,是后续课程中许多气象要素场的计算结果的理解的基础理论,也是毕业设计和论文中的基本分析方法。该方法用个数较少的几个空间分布模态来描述环流形势,而且基本涵盖环流场的信息,既能作为天气分析模型,其方法的延拓又能作为天气预报模型,在实际工作中也有极强的实用意义。通过该实验,深刻理解气象要素场的统计模型的意义,掌握气象要素场分析的基本方法,为实际预报业务和科研工作打下一定的基础。 二、实验的主要容: 对(0N o -90N o ,60E o -120W o )850hPa 高度场进行经验正交展开(EOF.FOR ),输出分析主要参数指标;绘制环流型图和相应的时间系数序列图,并加以分析。 三、步骤: 3.1 熟悉资料方法 3.1.1 资料 提供的资料为NCEP/NCAR 60年(1948年-2022年)逐年112月的850hPa 高度场资料, 资料围为(90N o -90S o ,0E o -360E o ),网格距为2.5*2.5,纬向格点数为144,经向格点数为73。资料为NC 格式,资料从南到北、自西向东排列,每月为一个记录,按年逐月排放,注意读取方式以及记录长度。 本次实验应用NCEP/NCAR (0N o -90N o ,60E o -120W o ) 58年(1948年-2022年)逐年7月的850hPa 高度场资料,纬向格点数为73,经向格点数为37。 3.1.2 方法(经验正交函数分解EOF ) EOF (经验正交函数分解)是针对气象要素场进行的,其基本原理是把包含p 个空间点 (变量)的场随时间变化进行分解。设抽取样本容量为n 的资料.则场中任一空间点i 和任 一时间点j 的距平观测值ij x 可看成由p 个空间函数ik v 和时间函数kj y (k=1,2,p)的线性组合,表示成 11221p ij ik kj i j i j ip pj k x v y v y v y v y =+L EOF 功能是从一个气象场多次观测资料中识别出主要空间型及其时间演变规律。 EOF 展开就是将气象变量场分解为空间函数(V )和时间函数(T )两部分的乘积之和: X=VT 。 应用步骤: 1) 资料预处理(距平或标准化处理) 2) 计算协方差矩阵 3) 用Jacobi 方法或迭代法计算协方差矩阵的特征值与特征向量 4) 将特征值从大到小排列 5) 计算特征向量的时间系数 6) 计算每个特征向量的方差贡献 7) 结果输出 3.2 编写程序 要求编写主程序,其中包括资料读入,围截取,子程序调用。注意:EOF 的资料输入,时间场一维,空间场一维。 *(附程序,对关键部分标志出)* EOF 程序 C* C * C PROGRAM NOTES * C * C THIS PROGRAM USES EOF TO ANALYSIS TIME SERIES * C OF METEOROLOGICAL FIEL D * C * C* C * C * Parameter Table * * C * C Mt=>LENTH OF TIME SERIES * C N =>NUMBER OF GRID-POINTS ( or STATIONS ) * C KS=-1, SELF; KS=0, DEPATURE; KS=1, STANDERDLIZE D DEPATUR E * C KV = NUMBER OF EIGENVALUES WILL BE OUTPUT * C KVT = NUMBER OF EIGENVECTORS AN D TIM E SERIES WILL BE OUTPUT * C MNH = Minimum(Mt,N) * C EGVT=>EIGENVECTORS, ECOF=>TIME COEFFICIENTS FOR EGVT * C ER(KV,1)=>LAMDA; LAMDA=>EIGENVALUE * C ER(KV,2)=>ACCUMULATE LAMDA * C ER(KV,3)=>THE SUM OF COMPONENTS VECTORS PROJECTE D ONTO * C EIGENVACTOR. * C ER(KV,4)=>ACCUMULATE ER(KV,3) * C * C* PARAMETER(N=73*37, MT=58, MNH=58) PARAMETER(KS=1, KV=10, KVT=10) REAL F(N,MT),AVF(N),DF(N),ER(MNH,4) REAL A(MNH,MNH),S(MNH,MNH),V(MNH) c* c INFN输入数据文件名;OUTERA输出特征值及方差贡献、累积方差贡献的文件名(文本); c OUTTC1输出时间系数文件(文本);OUTTC2输出时间系数文件(二进制); c OUTTEVT输出特征向量文件(二进制); c* CHARACTER*50 INFN,OUTERA,OUTTC1,OUTTC2,OUTEVT DATA INFN/'hgt8501948-2022july.grd'/ DATA OUTERA/'hgt_XT03ER3.DAT'/ DATA OUTTC1/'hgt_XT03TC13.DAT'/ DATA OUTTC2/'hgt_XT03TC23.DAT'/ DATA OUTEVT/'hgt_XT03VT3.DAT'/ C- Read ORIGINAL DATA - write(*,*)'Now is reading primative field !' OPEN (8,FILE=INFN,FORM='UNFORMATTED',ACCESS='DIRECT',RECL=N) DO IT=1,MT READ (8,REC=IT)(F(IS,IT),IS=1,N) END DO pause C* START TO RUN EOF PROGRAM * WRITE(*,*) write(*,*)' FIRST STEP' write(*,*)' forming the initial matrix (F) by using TRANSF !' CALL TRANSF(N,Mt,F,AVF,DF,KS) WRITE(*,*) write(*,*)' STEP 2' write(*,*)' achiving the covariance matrix by using the FORMA !' CALL FORMA(N,Mt,MNH,F,A) WRITE(*,*) write(*,*)' STEP 3 ' write(*,*)' caculating the eigenvalue and eigenvectors ' WRITE(*,*)' by using Jacob method !' CALL JCB(MNH,A,S,0.001) WRITE(*,*) write(*,*)' STEP 4' write(*,*)' arrange the eigenvalue and eigenvectors' WRITE(*,*)' by using ARRANG !' CALL ARRANG(MNH,A,ER,S) WRITE(*,*) write(*,*)' STEP 5' write(*,*)' the caculation of standard eigenvectors' WRITE(*,*)' by using TCOEFF !' CALL TCOEFF(KVT,N,Mt,MNH,S,F,V,ER) write(*,*) write(*,*)' STEP 6' write(*,*)' outputing eigenvalue and accumulation using OUTER !' CALL OUTER(MNH,ER,OUTERA) WRITE(*,*) WRITE(*,*)' STEP 7' write(*,*)' outputing the time coefficient of the eigenvecters !' CALL OUTVT1(KVT,N,Mt,MNH,S,F,OUTTC1,OUTTC2) WRITE(*,*) WRITE(*,*)' STEP 8' write(*,*)' outputing the eigenvecters !' CALL OUTVT3(KVT,N,Mt,MNH,S,F,OUTEVT) END C * FINISH THE MAIN PROGRAM * C * C SUBROUTINE FUNCTION * C * C THIS SUBROUTINE PRINTS ARRAY ER * C ER(KV,1) FOR SEQUENCE OF EIGENVALUE FROM BIG TO SMALL * C ER(KV,2) FOR EIGENVALUE FROM BIG TO SMALL * C ER(KV,3) FOR SMALL LO=(LAMDA/TOTAL VARIANCE) * C ER(KV,4) FOR BIG LO=SUM OF SMALL LO) * C * C - SAVING THE EIGENVALUE AN D ERROR -* SUBROUTIN E OUTER(MNH,ER,OUTERA) DIMENSION ER(MNH,4)