实习四:滑动平均 Fortran程序如下: PROGRAM MA integer i integer,parameter::n=85,ih=11,nyear=1922 integer::yr(n)=0 real X(n),X1(n) real::s(75)=0
C ********************************************** C * N: SAMPLE SIZE OF THE TIME SERIES * C * IH: MOVING LENGTH * C * NYEAR: FIRST YEAR OF THE SERIES * C * X(N): OROGINAL TIME SERIES * C * X1(N-IH+1): MOVED SERIES * C ********************************************** OPEN(2,FILE='d:\\4\\MA.DAT') open(12,file='d:\\4\\ma.grd',form='binary') OPEN(3,FILE='d:\\4\\hd.DAT') open(13,file='d:\\4\\hd.grd',form='binary') !年份 do i=1,n yr(i)=1922-1+i enddo !读入数据 READ(2,*)(X(I),I=1,N) !计算滑动平均 do i=1,11 s(1)=s(1)+x(i) enddo x1(6)=s(1)/ih do i=7,80 s(i-5)=s(i-6)+x(i+ih-6)-x(i-6) x1(i)=s(i-5)/ih enddo !写入数据
write(3,'(1x,i5,1X,f5.1,1X,f5.1)')((yr(i),x(i),x1(i)),i=1,n) write(12)((x(i)),i=1,n) write(13)((x1(i)),i=1,n) close(2) close(3) close(12) close(13) end
原数据和滑动后数据的图形:
由图可知,所给数据在1922-1955年之间呈波动下降趋势,在1955-1968年呈波动上升趋势,上升幅度较大,而1968-2006年之间大致在同一水平上波动,没有升降趋势。
实习五:eof Fortran程序: C$large
PROGRAM EOFPW
C THIS PROGRAM USES EOF FOR ANALYSING TIME SERIES C OF METEOROLOGICAL FIELD C M:LENTH OF TIME SERIES C N:NUMBER OF GRID-POINTS
C KS=-1:SELF; KS=0:DEPATURE; KS=1:STANDERDLIZED DEPATURE C KV:NUMBER OF EIGENVALUES WILL BE OUTPUT
C KVT:NUMBER OF EIGENVECTORS AND TIME SERIES WILL BE OUTPUT C MNH=MIN(M,N)
C Evf=EIGENVACTORS, tcF=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 PROJECTED ONTO c EIGENVACTOR.
C ER(KV,4)=ACCUMULATE ER(KV,3) C
PARAMETER(M=516,N=216,MNH=216,KS=-1,KV=10,KVT=2) PARAMETER(ff=-999.0,nx=18,ny=12) C
DIMENSION F(N,M),A(MNH,MNH),S(MNH,MNH),ER(mnh,4), * DF(N),V(MNH),AVF(N),evf(N,KVT),tCF(M,KVT), * data(Nx,ny),nf(N)
CCCCCCCCCCCCCCCCINPUT DATA
open(11,file='d:\\5\\sstpx.grd',form='unformatted', !access='direct',recl=nx*ny) do 132 it=1,m
read(11,rec=it)((data(i,j),i=1,nx),j=1,ny) do 132 jj=1,ny do 132 ii=1,nx kkkk=nx*(jj-1)+ii f(kkkk,it)=data(ii,jj) 132 continue close(11)
CCCCCCCCCCCCCCCCINPUT DATA CCCCCCCCCCCCCCCCCCC ccccccccccccccccccccccccccccccccccccc CALL Test1(n,m,ff,f,nf) write(*,*)'ok2'
CALL TRANSF(N,M,F,nf,AVF,DF,KS) write(*,*)'ok3'
CALL FORMA(N,M,MNH,F,A) write(*,*)'ok4'
CALL JCB(MNH,A,S,0.00001) write(*,*)'ok5'
CALL ARRANG(KV,MNH,A,ER,S) write(*,*)'ok6'
CALL TCOEFF(KVT,KV,N,M,MNH,S,F,V,evf,tcf,ER) write(*,*)'ok7'
call test3(N,ff,nf,evf,kvt) write(*,*)'ok8'
open(21,file='d:\\5\\evf.grd',form='unformatted', !access='direct',recl=nx*ny) irec=0
do 668 kk=1,kvt irec=irec+1
668 write(21,rec=irec)((evf(nx*(j-1)+i,kk),i=1,nx),j=1,ny) close(21)
open(21,file='d:\\5\\tcf.grd',form='unformatted', !access='direct',recl=kvt) irec=0
do 345 it=1,m irec=irec+1
345 write(21,rec=irec) (tcf(it,iik),iik=1,kvt) close(21)
106 format(10f8.4)
c CALL OUTER(KV,ER,mnh) open(21,file='d:\\5\\dats.dat')
write(21,106)(er(iiii,3),iiii=1,kv) close(21)
c CALL OUTVT(KVT,N,M,MNH,S,F,Evf,tcF) STOP END
SUBROUTINE Test1(n1,m,ff,f,nf) DIMENSION F(N1,M) DIMENSION nF(N1) do i=1,n1 nf(i)=0.0 enddo
do i=1,n1 do k=1,m
if(f(i,k).eq.ff)then f(i,k)=0.0 nf(i)=nf(i)+1
endif enddo enddo return end
SUBROUTINE TRANSF(n1,m,f,nf,avf,df,ks)
C THIS SUBROUTINE PROVIDES INITIAL F BY KS and kv. DIMENSION F(N1,M),AVF(N1) DIMENSION DF(N1) DIMENSION nF(N1) if(ks.eq.-1)then goto 30 endif do i=1,n1 avf(i)=0.0 enddo
if(ks.eq.0)then goto 5 endif do i=1,n1 df(i)=0.0 enddo
cccccccccccccccccc 5 continue
DO 141 I=1,N1
if(nf(i).ne.0) goto 141 do 12 j=1,m
12 AVF(I)=AVF(I)+F(I,J) AVF(I)=AVF(I)/M DO 14 J=1,M
14 F(I,J)=F(I,J)-AVF(I) 141 CONTINUE
IF(KS.EQ.0) THEN RETURN ELSE
DO 241 I=1,N1
if(nf(i).ne.0) goto 241 DO 22 J=1,M
22 DF(I)=DF(I)+F(I,J)*F(I,J) DF(I)=SQRT(DF(I)/M) DO 24 J=1,M
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库实习一(4)在线全文阅读。
相关推荐: