赞
踩
正态分布概率分布表,自查概率密度函数
调用函数如下
% M-K总体趋势检验 clc clear %file= readmatrix("7777.csv"); data=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 19 18 ... 17 16 15 14 3 15 1 2 5 1 15 2 5 21 4 7 58 9 6 4 5 1 2 0]; %输入原始数据--时间序列 %趋势检验 data=data'; alp=0.05; %假设置信度为0.05 [Zmk,beta,output] = MK_trend(data,alp) %突变检验 [UF,UB]= MK_mutation(data); %概率密度函数 F=@(t)integral(@(x)(exp(-x.^2/2)/sqrt(2*pi)),-t,t)-(1-alp); UF1 = fsolve(F,1); %绘图 x=1:1:length(UF); UF1=UF1.*ones(length(UF),1); figure; plot(x,UF,'b-') hold on; plot(x,UB,'g-') hold on; plot(x,UF1,'r-')
趋势检验调用函数
%趋势检验 function [Zmk,beta,output] = MK_trend(data,alp) %Zmk为趋势检验统计值,beta横梁趋势大小的指标,output假设检验结果 %计算检验统计值S sgn=[]; for i=1:size(data,1)-1 if data(i)>data(i+1) sgn(i,1)=-1; elseif data(i)==data(i+1) sgn(i,1)=0; elseif data(i)<data(i+1) sgn(i,1)=1; end end S=sum(sgn); %计算方差Var %当数据量小于10个数据的时候,此时数据量太小,一般是直接去概率表中查找S,这里直接给出S与Zmk的关系式 if size(data,1)<=10 Zmk=2*S/((size(data,1))*(size(data,1)-1)); %当数据量大于10个数据的时候 else %判断数据是否都是唯一的数据,如果数据唯一的话采用下面的计算方法 if length(unique(data))==length(data) Var=((size(data,1))*(size(data,1)-1)*(2*size(data,1)+5))/18; %当数据量不唯一的时候 else %找出所有重复数据的重复次数 count=hist(data,unique(data)); %将重复次数为1的数据剔除掉 count(count==1)=[]; %计算Var Var=(length(data)*(length(data)-1)*(2*length(data)+5)... -sum(count.*(count-1).*(2.*count+5)))/18; end %计算Zmk if S>0 Zmk=(S-1)/sqrt(Var); elseif S==0 Zmk=0; elseif S<0 Zmk=(S+1)/sqrt(Var); end end %衡量趋势大小的指标 t=1; for i=2:length(data) for j=1:(i-1) slope(t)=(data(i)-data(j))/(i-j); t=t+1; end end beta=median(slope); %假设检验,双边假设,判断趋势是否明显 %概率密度函数 F=@(t)integral(@(x)(exp(-x.^2/2)/sqrt(2*pi)),-t,t)-(1-alp); Zmk1 = fsolve(F,1); if Zmk>0 if abs(Zmk)>=Zmk1 output=1; %'在alp的置信水平上,数据处于明显上升的趋势' else output=2; %'在alp的置信水平上,数据处于上升趋势' end elseif Zmk<0 if abs(Zmk)>=Zmk1 output=3; %'在alp的置信水平上,数据处于明显下降的趋势' else output=4; %'在alp的置信水平上,数据处于下降趋势' end else output=5; %'不增不减' end end
突变检验
function [UF,UB]= MK_mutation(data) %将正序放在第一列,逆序放在第二列 data=[data flipud(data)]; for n=1:2 for i =2:size(data,1) r=[]; %计算秩序列 for j=1:i-1 if data(i,n)>data(j,n) r(j,n)=1; else r(j,n)=0; end end k=i-1; Sk(k,n)=sum(r(:,n)); %计算均值 ESk(k,n)=k*(k+1)/4; %计算方差 VarSk(k,n)=k*(k-1)*(2*k+5)/72; %计算统计变量 UFk(k,n)=(Sk(k,n)-ESk(k,n))/sqrt(VarSk(k,n)); end end %正序计算结果取第一列 UF=UFk(:,1); %逆序计算结果取第二列的负数 UB=flipud(-UFk(:,2)); %UF1、UB1都为0; %UF=[0;UF]; %UB=[0;UB];
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。