- 积分
 - 117
 
	- 贡献
 -  
 
	- 精华
 
	- 在线时间
 -  小时
 
	- 注册时间
 - 2012-11-28
 
	- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
	
 
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
 本帖最后由 胆小车迷 于 2016-6-21 17:45 编辑 
  
- <P>        SUBROUTINE SMK(Y,M,MD,U,N)
 
 -         DIMENSION Y(N),M(N),MD(N),U(N)
 
 -         M(1)=0
 
 -         DO 10 I=2,N
 
 -         M(I)=0
 
 -         MD(I)=0
 
 -         DO 20 J=1,I-1
 
 -         IF(Y(I).LT.Y(J))GOTO 20
 
 -         M(I)=M(I)+1
 
 -   20   CONTINUE</P>
 
 - <P>        MD(I)=MD(I-1)+M(I)
 
 -  10   CONTINUE
 
 -         U(1)=0.0
 
 -         DO 30 I=2,N
 
 -         E=I*(I-1)/4.00
 
 -         VAR=I*(I-1)*(2*I+5)/72.00
 
 -         U(I)=(MD(I)-E)/SQRT(VAR)
 
 -   30        CONTINUE
 
 -         RETURN
 
 -         END
 
 - </P>
 
  复制代码 
做过MK检验工作的人,对这段代码肯定熟悉,这是南气院程序集MK法的fortran代码中的一个子程序,功能就是计算UF,UB序列的。Y为我们要检验的序列。 
重点来看上面红色标注的代码,从程序的上来看,意思应该是当第i时刻数值小于j时刻数值时,累计数不做任何处理,当第i时刻数值大于或者等于j时刻数值时,累计数加1。 
 
然而,在魏老师现代气候统计诊断与预测技术(第2版)中的P63-64概述中指明秩序列sk是第i时刻数值大于j时刻数值个数的累计数。 
 
程序中,当第i时刻数值等于j时刻数值时,累计数也加1了,这样和魏老师书上的说法不一样啊。难道程序有错啊? 
 
想想觉得不应该啊,南气院的程序流传已久,多少老师、学生都用过,不可能那么多大虾没发现问题,让我发现了。于是反复看了算法和程序,还是没想通。 
因本人也是最近才接触MK法,fortran也没完全掌握,有此疑问,请各位指点。 
 
PS:Matlab板块现在就有两种MK算法的程序,一种是直接从fortran翻译过来的(记得是一个叫伽蓝的网友);另一种就消除了上面说的i,j时刻相等,累计数加1的情况。真不知道谁是对滴。 
 
         |   
 
 
 
 |