- 积分
- 27877
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-4-25
- 最后登录
- 1970-1-1
![[伽蓝鸟-monsoon] 粉丝数:655 微博数:6116 新浪微博达人勋](source/plugin/sina_login/img/light.png)
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
目前搜到的MATLAB实现MK突变检验的代码似乎是错的。前几天做了一个,其实也只是把魏凤英老师的Fortran程序翻译成了MATLAB而已。第一次发帖子。。可以直接把代码贴上来么。。属于“源程序”这个主题?
[UF,UB]=MannKendall(Y);
% % Y即为待检测的时间序列
figure,hold on;
plot(UF,'-b');
plot(UB,'-r');
function [UF,UB]=MannKendall(timeseries)
N=length(timeseries);
UF=SMK(timeseries,N);
for i=1:N
YY(i)=timeseries(N+1-i);
end
u_res=SMK(YY,N);
for i=1:N
UB(i)=-u_res(N+1-i);
end
function u_res=SMK(Y,N)
m_res=zeros(N,1);md_res=zeros(N,1);u_res=zeros(N,1);
m_res(1)=0;
for i=2:N
m_res(i)=0;
md_res(i)=0;
for j=1:i-1
if Y(i)<Y(j)
m_res(i)=m_res(i)+0;
else
m_res(i)=m_res(i)+1;
end
md_res(i)=md_res(i-1)+m_res(i);
end
end
u_res(1)=0;
for i=2:N
E=i*(i-1)/4;
VAR=i*(i-1)*(2*i+5)/72;
u_res(i)=(md_res(i)-E)/sqrt(VAR);
end
|
评分
-
查看全部评分
|