|||
SEN趋势度分析及其MATLAB实现
一、博文概述
1.目的
学习理解SEN趋势度分析方法及其应用,并编写简易的SEN趋势度分析函数
2.时间
2016年12月24日
3.关键词
SEN趋势度分析 MATLAB实现
二、博文内容
1.SEN趋势度分析简介
SEN趋势度分析方法是由Sen等人1968年提出的研究长时序变化的方法(Sen,1968),计算公式如下:
$\beta =Median(\frac{x_{j}-x_{i}}{j-i}), j>i, i = 1,2,3,...,N$
其中,Xj和Xi属于待分析趋势的时间序列的元素,依据时间顺序排列。Median为中位数函数。当计算结果β大于0时表示待分析的时间序列呈现上升趋势,当计算结果β小于0时表示待分析的时间序列呈现下降趋势。
2.SEN趋势度分析的MATLAB实现
SEN趋势度分析的MATLAB实现的关键在于理解SEN的计算公式,并在具有一定MATLAB基础的情况下,将其通过MATLAB语言编写出来。
2.1 公式解析
2.2 MATLAB程序实现
基于2.1的分析,可以利用MATLAB语言实现简单版本SEN函数的编写,个人编写的函数如下:
%-------------------------------------------------------------------------%
% 函数目的:对时间序列进行SEN趋势度分析
% 时间:2016年12月24日
% 作者:东方易
% 输入A:待分析的时间序列(列向量或行向量均可)
% 输出Beta: SEN趋势分析结果
% 不足之处:假设待分析的时间序列不存在缺测、异常值等情况
%-------------------------------------------------------------------------%
function Beta = SENFun_Version1(A)
Row = length(A)*(length(A) - 1)/2;
Q = [];
for ii = 1:length(A)-1
Xi = A(ii);
for jj = (ii+1):length(A)
Xj = A(jj);
Q_Temp((jj-ii),1) = (Xj - Xi)./(jj - ii);
end
Q = [Q;Q_Temp];
clear Q_Temp %必须清除Q_Temp,否则行数不对
end
if Row == size(Q,1)
Beta = median(Q); %MATLAB按列求中位数
else
disp('请注意检查,出现错误');
end
end
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-10-19 21:28
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社