资讯详情

MK检验突变分析 matlab

% Mann-Kendall突变检测

% 数据序列y

% 结果序列UFk,UBk2

%读取excel给矩阵中的数据y

y的样本数为%

%A列出时间和降水数据

x=降水(:,1)

y=降水(:,2)

N=length(x);

n=length(y);

% 正序列计算---------------------------------

% 定义累计量序列Sk,长度=y,初始值=0

Sk=zeros(size(y));

% 定义统计量UFk,长度=y,初始值=0

UFk=zeros(size(y));

% 定义Sk序列元素s

s = 0;

% i从2开始,因为根据统计量UFk公式,i=1时,Sk(1)、E(1)、Var(1)均为0

% 此时UFk因此,在公式中下令毫无意义UFk(1)=0

for i=2:n

for j=1:i

if y(i)>y(j)

s=s 1;

else

s=s 0;

end;

end;

Sk(i)=s;

E=i*(i-1)/4; % Sk(i)的均值

Var=i*(i-1)*(2*i 5)/72; % Sk(i)的方差

UFk(i)=(Sk(i)-E)/sqrt(Var);

end;

% ------------------------------正序列计算end

% 逆序列计算---------------------------------

% 构造逆序列y2,长度=y,初始值=0

y2=zeros(size(y));

% 定义逆序累计量序列Sk2,长度=y,初始值=0

Sk2=zeros(size(y));

% 逆序统计量定义UBk,长度=y,初始值=0

UBk=zeros(size(y));

% s归0

s=0;

% 逆转样本按时间顺序y

% 也可以使用y2=flipud(y);或者y2=flipdim(y,1);

for i=1:n

y2(i)=y(n-i 1);

end;

% i从2开始,因为根据统计量UBk公式,i=1时,Sk2(1)、E(1)、Var(1)均为0

% 此时UBk因此,在公式中下令毫无意义UBk(1)=0

for i=2:n

for j=1:i

if y2(i)>y2(j)

s=s 1;

else

s=s 0;

end;

end;

Sk2(i)=s;

E=i*(i-1)/4; % Sk2(i)的均值

Var=i*(i-1)*(2*i 5)/72; % Sk2(i)的方差

% 由于对逆序列的累积量Sk2的构建中,依然用的是累加法,即后者大于前者时s加1,

% S的大小表示上升趋势的大小,在序列逆序后,应该表现出与原序列相反

% 因此,采用累加法统计趋势表现Sk2序列,统计公式(S(i)-E(i))/sqrt(Var(i))

% 也不应该改变,但统计量UBk应用相反的数字来表示正确的逆序序列趋势

UBk(i)=0-(Sk2(i)-E)/sqrt(Var);

end;

% ------------------------------逆序列计算end

% 上一步到了UBk逆序列在逆序时间上的趋势统计

% 与UFk在寻找突变点时,两条曲线应具有相同的时间轴,因此

% 再按时间序列逆转结果统计量UBk,得到时间正序UBk2,做图用

UBk2=zeros(size(y));

% 也可以使用UBk2=flipud(UBk);或者UBk2=flipdim(UBk,1);

for i=1:n

UBk2(i)=UBk(n-i 1);

end;

% 使用突变检测图时UFk和UBk2

figure(3)%画图

plot(x,UFk,'r-','linewidth',1);

hold on

plot(x,UBk2,'b-.','linewidth',1);

plot(x,1.96*ones(N,一、linewidth',0.5);

plot(x,2.56*ones(N,一、linewidth',0.5);

axis([min(x),max(x),-5,5]);

legend('UF统计量,UB统计量;

xlabel年份FontName','TimesNewRoman','FontSize',9);

ylabel统计量,FontName','TimesNewRoman','Fontsize',9);

%grid on

hold on

plot(x,0*ones(N,1),'-.','linewidth',0.5);

plot(x,1.96*ones(N,一、linewidth',0.5);

plot(x,-1.96*ones(N,一、linewidth',0.5);

plot(x,2.56*ones(N,一、linewidth',0.5);

plot(x,-2.56*ones(N,一、linewidth',0.5);

time=1951:6:2014

Xlabel(年份);

Ylabel(统计量);

标签: 集成电路mk41s80x

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台