PatientHeart的个人博客分享 http://blog.sciencenet.cn/u/PatientHeart

博文

SEN趋势度分析及其MATLAB实现

已有 12867 次阅读 2016-12-24 22:47 |个人分类:地理数学方法 程序实现|系统分类:科研笔记| MATLAB, SEN趋势度分析

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




https://blog.sciencenet.cn/blog-3277161-1023083.html

上一篇:MATLAB中的geotiffread函数
下一篇:R语言中的rev函数
收藏 IP: 202.112.90.*| 热度|

1 范玉兵

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-10-19 21:28

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部