- 积分
- 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的情况。真不知道谁是对滴。
|
|