[Fortran] 纯文本查看 复制代码
C **********************************************************
C Moving T_TEST program
C Written by SUN Xuguang in Jan 8, 2003
C Modified by SUN Xuguang in Sep 24, 2004
C **********************************************************
C NOTE :
C n -- the total sample number of the time series
C n1,n2 -- the sample numbers of the subtime series
C ta -- the critical value of t for 0.01 significance (a=0.01)
C iv -- temporal parameter
C@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
C this program is used to
C
parameter(n=54,n1=11,n2=11,ta=2.85)
parameter(undef=-9999.)
real x(n),t(n)
integer irec !used to indicate rec number
character*80 input,output !in and out files
input='tnj7.txt'
output= 'MovingttestTnj7-8.txt'
open(1,file=input)
C ,form='unformatted',status='old',
C &access='direct',recl=1)
open(2,file=output,form='unformatted',status='unknown',
&access='direct',recl=1)
C==========================================================
C read data
C==========================================================
do i=1,n
irec=i
C read(1,rec=irec)x(i)
read(1,*)x(i)
enddo
C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
C let's begin to do moving_t_test
C note: the first n1 and the last n2 are null
Cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
C
do i = 1,n
t(i)=undef !initialize t values
enddo
do 10 i=n1,n-n2 !calculate t values in this section
x1=0.0 !initialize x1 mean value by zero
do j1=i-n1+1,i
x1=x1+x(j1)
enddo
x1=x1/real(n1) !calculate x1 mean value
s1=0.0 !initialize x1 ms(mean square)
do j1=i-n1+1,i
s1=s1+(x(j1)-x1)**2
enddo
s1=s1/real(n1) !calculate x1 mean square value
x2=0.0 !initialize x2 mean value by zero
do j2=i,i+n2-1
x2=x2+x(j2)
enddo
x2=x2/real(n2) !calculate x2 mean value
s2=0.0 !initialize x2 ms(mean square)
do j2=i,i+n2-1
s2=s2+(x(j2)-x2)**2
enddo
s2=s2/real(n2) !calculate x2 mean square value
s=sqrt((n1*s1+n2*s2)/real(n1+n2-2))
t(i)=(x1-x2)/s/sqrt(real(n1+n2)/real(n1*n2))
10 continue
C============================================================
C output data
C============================================================
do i=1,n
C do i=n1,n-n2
irec=(i-1)*2+1
write(2,rec=irec)t(i)
irec=(i-1)*2+2
write(2,rec=irec)ta
enddo
close(1)
close(2)
end