Mann-Kendall突变检测(mk突变检测)

2023-10-31

% Mann-Kendall突变检测
% 数据序列y
% 结果序列UFk,UBk2
%--------------------------------------------
%读取excel中的数据,赋给矩阵y
%获取y的样本数
%A为时间和径流数据列

A=xlswrite('数据.xls')
x=A(:,1);%时间序列
y=A(:,2);%径流数据列
N=length(y);
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做图寻找突变点时,2条曲线应具有同样的时间轴,因此
% 再按时间序列逆转结果统计量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
% 写入目标xls文件:f:\test2.xls
% 目标表单:Sheet1
% 目标区域:UFk从A1开始,UBk2从B1开始

xlswrite('f:\test2.xls',UFk,'Sheet1','A1');
xlswrite('f:\test2.xls',UBk2,'Sheet1','B1');
figure(3)                       %画图
plot(x,UFk,'r-','linewidth',1.5);
hold on
plot(x,UBk2,'b-.','linewidth',1.5);
plot(x,1.96*ones(N,1),':','linewidth',1);
axis([min(x),max(x),-5,5]);
legend('UF统计量','UB统计量','0.05显著水平');
xlabel('t (year)','FontName','TimesNewRoman','FontSize',12);
ylabel('统计量','FontName','TimesNewRoman','Fontsize',12);
title(StationID)  %添加标题
hold on
%hold on
grid(gca,'minor')% 画出次格网
plot(x,0*ones(n,1),'-.','linewidth',1);
plot(x,1.96*ones(n,1),':','linewidth',1);
plot(x,-1.96*ones(n,1),':','linewidth',1);


savepath=['D:\',num2str(StationID),'.png']%保存路径
saveas(StationID,savepath)%保存为png文件
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mann-Kendall突变检测(mk突变检测) 的相关文章

  • MATLAB 编译器与 MATLAB 编码器

    两者有什么区别 据我了解 MATLAB Compiler将MATLAB代码包装成 exe文件 这样就可以在不安装MATLAB的情况下使用它 并且只需要MCR 除此之外 MATLAB Builder NE 还可以用于生成与 Net 框架一起使
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • 如何在 MATLAB 编译的应用程序中运行外部 .m 代码? [复制]

    这个问题在这里已经有答案了 我有一个 MATLAB 项目 我使用 MCC 对其进行编译以获得单个可执行文件 然后我想知道外部程序员是否可以在 exe 中执行他的一些 m 文件 而无需重新编译整个项目 重点是提供一个应用程序 其他开发人员可以
  • 通过 cuFFT 进行逆 FFT 缩放

    每当我使用 cuFFT 绘制程序获得的值并将结果与 Matlab 的结果进行比较时 我都会得到相同形状的图形 并且最大值和最小值位于相同的点 然而 cuFFT 得到的值比 Matlab 得到的值大得多 Matlab代码是 fs 1000 s
  • 如何选择面积最大的对象?

    我用过bwconvhull检测图像的某个部分 正如您在图像中看到的那样 有许多具有特定质心的对象 我想做的是检测面积最大的物体 左起第一个大物体 并忽略其他物体 我应该遵循哪种方法 我将非常感谢您的帮助 以下是代码 由于我仍在努力 所以写得
  • 使用简单矩阵乘法时出错

    我在一次简单的乘法运算中偶然发现了一个错误 这让我感到非常惊讶 我一直以为这里发生了什么 只为矩阵乘法 http www mathworks nl help matlab matlab prog operators html x 2 y z
  • 通过颜色渐变修补圆

    我正在尝试绘制一个颜色渐变 我希望它沿轴均匀 在下图由角度定义的情况下 pi 7 当我使用patch命令 绘图与所需的梯度方向匹配 但沿其方向并不均匀 沿圆的点之间形成各种三角形 这是代码 N 120 theta linspace pi p
  • 在矩阵中找到叉的最快方法

    定义 A i j 1 是十字的中点 如果元素A i 1 j 1A i 1 j 1A i j 1 1A i j 1 1 这些元素和中点一起形成矩阵 A 中的十字 其中 A 至少是一个 3 3 矩阵 并且i j 0 假设上图是 8 8 矩阵 A
  • 在 Pari-GP 中嵌套特定递归

    每个人 我最初在 Stackexchange 上发布了类似的问题 它已移至此处 可以在链接中找到 在 Matlab 中声明函数递归序列 https stackoverflow com questions 67146061 declaring
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • MATLAB 中的逻辑数组与数值数组

    我正在比较两个二进制数组 我有一个数组 其中值可以是一或零 如果值相同则为 1 如果不同则为零 请注意 我正在做检查之外的其他事情 因此我们不需要进入矢量化或代码的性质 在 MATLAB 中使用数值数组和逻辑数组哪个更有效 Logical
  • 图像处理方面的空间和时间表征有什么区别?

    我是学习图像处理的初学者 我对空间和时间表征的概念有点困惑 那么 对于空间表征来说 是不是像一张二维地图 包含了一些关于地图的统计信息呢 就时间特征而言 值是相对于时间的吗 这意味着什么以及我们为何关心 谢谢 当您在不同时间拍摄一系列图像时
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • MATLAB 子图标题和轴标签

    我有以下脚本来最终绘制 4 x 2 子图 files getAllFiles preliminaries n size files cases cell 1 n m cell 1 n for i 1 1 n S load files i c
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • MATLAB 问题中的 Parfor

    为什么我不能使用parfor在这段代码中 parfor i 1 r for j 1 N r xr j N r i 1 x i r j 1 end end 这是错误 错误 parfor 中的变量 xr 无法分类 请参阅 MATLAB 中的并行
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • MATLAB;具有 2+ 个/分割图例的饼图 R2017b

    我正在创建一个饼图 理想情况下希望图例水平显示在顶部和 或底部 然而 在几乎所有情况下 这是不可能的 因为图例超出了数字 因此 我理想情况下希望将图例分成两个 或更多 子图例并单独放置它们 我知道这不是 MATLAB 中的内置功能 我使用的

随机推荐

  • ubuntu 16.04 编译与安装 absl 库(cartographer库安装之1-absl)

    set o errexit set o verbose git clone https github com abseil abseil cpp git cd abseil cpp git checkout d902eb869bcfacc1
  • 【CTF】web-文件上传篇1

    upload labs靶场 1 前端js限制 2 修改Content Type 3 htaccess绕过 4 00截断 1 前端js限制 场景 使用 burp 抓包 在点击上传时 直接弹出了提示 这时 burp 并没有抓到数据包 说明是在前
  • 深度学习常用Linux命令

    Linux命令查询手册 https www linuxcool com 目录 一 常用快捷键 二 关于docker的使用 1 进入docker 2 设置使用某块dcu代码 3 docker与主机之间的文件传输 三 关于文件和文件夹 1 文件
  • ADS错误之the session file 'C:\user\username\default-1-2-0-0.ses' could not be loaded

    刚在编arm程序的时候遇到了这个错误 去网上搜了下资料 查到关于这个错误信息的解决方法 如下 如果出现错误信息 the session file C user username default 1 2 0 0 ses could not b
  • 105-----JS基础-----添加删除记录-修改

    一 代码 本节的代码是对104节的内容进行优化 因为按照上一节的内容这样写的话 会创建过多的资源 造成资源浪费 导致用户体验不好 当界面复杂起来 可能会变得很卡 造成用户体验不好 所以需要进行优化 下面的例子 避免了人为的创建多个节点元素
  • 总结一下刷过的题

    今年刷题还是挺爽的 1 Two Sum 用map建立number gt index映射即可 2 Add Two Numbers 利用链表的基本操作来模拟高精度相加过程 链表头为最低位 3 Longest Substring Without
  • Python人脸识别项目-人脸检测

    人脸检测 接下来我们先拿一个简单的人脸检测项目练练手 我们的目标是实现通过摄像头实时检测人脸 这里我们要用到一个分类器这个分类器可以从github上下载也可以从我们的Python第三包里直接用 在cv2包的data文件夹里面 coding
  • C#基础(条件运算符)

    作用 格式 用于比较两个变量或常量 条件运算符 一定存在左右两边的内容 左边内容 条件运算符 右边内容 分类 是否大于 gt 是否小于 lt 是否等于 是否不等于 是否大于等于 gt 是否小于等于 lt 比较的结果 返回的是 一个 bool
  • Deep Learning for Massive MIMO CSI Feedback

    这篇文章是自己之前学习论文的一点心得 是源于AI 无线通信这个比赛 论文百度搜这个 去IEEE官网就可以下载了 C Wen W Shih and S Jin Deep Learning for Massive MIMO CSI Feedba
  • 计算2支股票的M天运动平均价格时间

    计算2支股票的M天运动平均价格时间 题目描述 给定2支股票的开盘价和收盘价的N天历史数据 要求按开盘和收盘 分别计算每支股票的每个日期对应的M天移动平均价格 假定两个股票数据如下 日期 开盘 收盘 第1支股票价格S1 第2支股票价格S2 2
  • 移动端按设计图比例布局

    利用选择器设置全局字体大小 root font size 50px 根据设计图大小转换字体大小 相对于视图750为例 1rem 100px root font size calc 100vw 7 5
  • 北京大学肖臻老师《区块链技术与应用》公开课笔记16——ETH账户篇

    北京大学肖臻老师 区块链技术与应用 公开课笔记 以太坊账户篇 对应肖老师视频 click here 全系列笔记请见 click here About Me 点击进入我的Personal Page BTC系统是基于交易的账本 系统中并未显示记
  • 【密码算法 之八】Hash类算法(单向散列函数) MD5 \ SHA1 \ SHA224 \ SHA256 \ SHA384 \ SHA512等浅析

    1 综述 Hash算法 又称单向散列函数 one way hash function 单向散列函数有一个输入和一个输出 其中输入称为消息 message 输出称为散列值 hash value 单向散列函数可以根据消息的内容计算出散列值 而散
  • 1025 反转链表python3无超时

    终于在卡了好几天之后想到了解决办法 这道题给出的代码并不能保证完全成功 不超时的概率大概在50 文章目录 一 最初的代码 二 代码改进 一 最初的代码 这个问题一般解决思路如下 获得正序链表 根据条件反转链表 输出链表 代码如下 usr b
  • 【python】正则表达式匹配数据

    前言 使用正则表达式处理数据 可进行字符串匹配 提取和替换等操作 在python中 通过re库完成正则匹配的操作 一 正则语法规则 1 常用匹配符 模式 描述 匹配字符串开头 匹配字符串结尾 匹配任意字符 匹配前面的字符零次或多次 匹配前面
  • Java中的浮点数据(float、double)进行算术运算时出错的问题剖析

    本文主题 对浮点数进行算术运算时 为何运算结果不正确 BigDecimal类型 常用方法的讲解 简单的浮点数算术运算工具类的设计 在Java前面讲解float double两种基本浮点类型时已经指出 这两个基本类型的浮点数容易引起精度丢失
  • python实现beta分布概率密度函数

    beta分布的最大特点是其多样性 从下图可以看出 beta分布具有各种形态 有U形 类似正态分布的形状 类似uniform分布的形状等 正式这一特质使beta分布在共轭先验的计算中起到重要作用 import matplotlib pyplo
  • MySQL——索引及调优篇

    一 索引的数据结构 1 1 为什么要使用索引 索引是存储引擎用于快速查找数据记录的一种数据结构 就好比一本教科书的目录部分 通过目录中找到对应文章的页码 便可快速定位到需要的文章 MySQL中也是一样的道理 进行数据查找时 首先查看查询条件
  • 关于常用的http请求头以及响应头详解

    一 常用的http请求头 1 Accept Accept text html 浏览器可以接受服务器回发的类型为 text html Accept 代表浏览器可以处理所有类型 一般浏览器发给服务器都是发这个 2 Accept Encoding
  • Mann-Kendall突变检测(mk突变检测)

    Mann Kendall突变检测 数据序列y 结果序列UFk UBk2 读取excel中的数据 赋给矩阵y 获取y的样本数 A为时间和径流数据列 A xlswrite 数据 xls x A 1 时间序列 y A 2 径流数据列 N leng