程序如下

function [ FLAGS ] = BGSA( x,y,P0,L0 )

% [ FLAGS ] = BGSA( x,y,P0,L0 )

%  x: 序列的x坐标(仅用于绘图,如果不使用则设置为[])

%  y: 降雨量序列

%  P0: 显著性水平门限值,低于此值的不再分割

%  L0: 最小分割尺度,子段长度小于此值的不再分割

%  FLAGS: 返回的逻辑向量与y大小相同,值为1表示相应的位置定位分割点

% 通过Bernaola-Galvan分割算法(BGSA)找出并绘制突变点及其最大密度间隔。

%   如何解释这个数字?

%   蓝色细曲线是原始序列; 而粗一个表示每个段中原始序列的间隔平均值t; 红色垂直线表示分割点所在的位置;阴影指示最大突变密度间隔。\

n = length(y);

if isempty(x)

x = 1:n;

end

FLAGS = zeros(1,n);

FLAGS(n) = 1;

% 通过标记1在FLAGS中找到分割点的位置。

num_sp = sum(FLAGS);

while 1

I = find(FLAGS==1);

numsp_bf = num_sp;

for k = 1:num_sp

if k==1

subx = x(1:I(k));

suby = y(1:I(k));

else

subx = x(I(k-1)+1:I(k));

suby = y(I(k-1)+1:I(k));

end

if length(subx)>L0

[ Xpos,PTmax ] = calc_TP( subx,suby );

if PTmax>=P0

FLAGS(x==min(Xpos)) = 1;

num_sp = num_sp+1;

end

end

end

if num_sp==numsp_bf

break

end

end

% 计算每个分割的平均序列。

for k = 1:num_sp

if k==1

my(1:I(k)) = mean(y(1:I(k)));

else

my(I(k-1)+1:I(k)) = mean(y(I(k-1)+1:I(k)));

end

end

% 调整一些不合理的突变点。

FLAGS(n) = 0;

for j = 2:n

if FLAGS(j)==1 && FLAGS(j-1)==1

FLAGS(j) = 0;

end

end

%return

figure

% 计算并找出最大突变密度的间隔。

NDT = L0;

for j = 1:n-NDT

n = sum(FLAGS(j:j+NDT));

eta(j) = n/NDT;

end

Ieta = find((eta==max(eta))+(eta~=0)==2);

% 影响间隔

ya = [(max(y)+1)*1.1 (max(y)+1)*1.1];

bv = (min(y)-1)*1.1;

xamin = x(Ieta);

xamax = x(Ieta+NDT);

if ~isempty(Ieta)

xa(1,:) = [xamin(1) xamax(1)];

kk = 1;

for l = 2:length(Ieta)

if xamax(l-1)>=xamin(l)

xa(kk,:) = [min(xa(kk,:)) xamax(l)];

else

kk = kk+1;

xa(kk,:) = [xamin(l) xamax(l)];

end

end

for l = 1:kk

area(xa(l,:),ya,bv,'LineStyle','none','FaceColor',[.6 .6 .6],'FaceAlpha',.6,'ShowBaseLine','off');

hold on

end

end

% 在分割点绘制曲线和垂直线。

plot(x,y,'color',[0 .447 .741]);

hold on

plot(x,my,'color',[0 .447 .741],'linewidth',2);

hold on

I = find(FLAGS==1);

for k = 1:sum(FLAGS)

plot([x(I(k)) x(I(k))],[bv max(ya)],'r-');

hold on

end

axis([min(x) max(x) (min(y)-1)*1.05 (max(y)+1)*1.05]);

title('Bernaola-Galvan Segmentation Algorithm')

end

function [ Xpos,PTmax ] = calc_TP( X,Y )

% 子函数计算统计量T,并找出与X系列对应的位置(Xpos)的Tmax,然后计算显着性检验的统计PTmax。

N = length(Y);

T = zeros(1,N);

for i=2:N-1

nl = length(Y(1:i));

nr = length(Y(i:N));

ml = mean(Y(1:i));

mr = mean(Y(i:N));

vl = var(Y(1:i));

vr = var(Y(i:N));

T(i) = abs((ml-mr)/sqrt(1/nl+1/nr)/sqrt(((nl-1)*vl+(nr-1)*vr)/...

(nl+nr-2)));

end

Tmax = max(T);

Xpos = X(T==Tmax);

gamma = 4.19*log(N)-11.54;

delta = .4;

v = N-2;

PTmax = (1-betainc(v/(v+Tmax^2),delta*v,delta))^gamma;

end

bg算法 matlab,求助大神,有关BG算法相关推荐

  1. 不同cpu matlab,求助大神,为何不同机器运行MATLAB结果不同

    求助:不同机器运行MATLAB结果不同 我调用MATLAB优化工具箱的库函数fmincon,使用相同的初始解(可行解),对同一个问题进行局部搜索(算法为序列二次规划,即SQP),但在不同机器上得到的结 ...

  2. evcdf matlab,求助大神

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 muX=[20;10];cvX=[0.25;0.2]; rhoX=[1,0.5;0.5,1];sigmaX=cvX.*muX; aEv=sqrt(6)*s ...

  3. 2021-08-15关于水卡数据算法,求助大神

    6E 4B 7B 9C BE 8E CD BB 9B 92 CA 6B 47 8B 3D A1    70 91 7B 9C BE 8E CD BB 9B 92 CA 6B 47 8B 3D E9  ...

  4. vs 2017 建立 php,程序在VS 2017中输出的结果为什么是这样的?求助大神!谢谢!...

    编程论坛 → C语言论坛 程序在VS 2017中输出的结果为什么是这样的?求助大神!谢谢! 菜鸟100学C 发布于 2018-09-29 08:06, 1405 次点击 #include int fu ...

  5. edge robert matlab,哪位熟悉matlab的大神路过瞄一眼哈

    cxfx(believe truth believe me) UID240430 帖子100 精华积分1755 蛋蛋币1755 枚 威望0 BT积分0 阅读权限60 性别男 在线时间125 小时 注册 ...

  6. 求助大神:valgrind 出现 address 0x0 is not stack'd or (recently)freee'd怎么解决?linuxclionvalgrind## 标题

    求助大神:valgrind 出现 address 0x0 is not stack'd or (recently)freee'd怎么解决?linux&clion&valgrind## ...

  7. Mysword我的剑圣经破解方法,,,求助大神。

    Mysword我的剑圣经破解方法,,,求助大神. 求大神帮助我给些思路方法破解这款软件,我不知道该从哪里下手,求大家帮助一下,会有一些辛苦费谢谢大家的帮助!!!!2256771988我的qq

  8. matlab 12位 显示不出来,求助大神,为何不同机器运行MATLAB结果不同

    求助:不同机器运行MATLAB结果不同 我调用MATLAB优化工具箱的库函数fmincon,使用相同的初始解(可行解),对同一个问题进行局部搜索(算法为序列二次规划,即SQP),但在不同机器上得到的结 ...

  9. matlab模拟出现较大误差是什么原因,求助大神,使用BP神经网络预测数据,为什么误差很大?...

    随机产生了25组数据,利用公式求得结果矩阵,现用20组数据训练BP网络,剩下的5组进行预测,产生的结果误差为什么很大,请大神指教,不甚感激 由于金币只有1.5个,所以没办法发求助帖 %测试BP神经网络 ...

最新文章

  1. 开发日记-20190506 关键词 汇编语言(五)Hello World!
  2. linux异机拷贝,rman恢复异机数据库
  3. Redis-08Redis数据结构--基数HyperLogLog
  4. QT5界面操作3: QPainter和paintEvent(self, event)的配合
  5. Linux下sed命令替换配置文件中某个变量的值(改变包含字符的一行的值)
  6. 团队开发-----电子秘书(便签+闹钟+音视频)
  7. LeetCode 2178. 拆分成最多数目的偶整数之和(等差数列求和)
  8. docker nacos
  9. Adodb CS3(DW、FW、PS、FLASH)安装序列号
  10. java 文件读写 中文_java读写中文文件
  11. Kubernetes的Serializer解析
  12. 更改文字颜色为红色HTMl语言,怎样用css将文字改为红色?
  13. 百度地图API获取公交路线及站点数据
  14. Prince和学生们侃侃而谈系列06
  15. 微信小程序进度条组件自定义数字_微信小程序小技巧系列《十三》多级联动,自定义圆形进度条 ... ......
  16. 强连通分量SCC(Tarjan)
  17. 黄山杭州五日游攻略,厦门出发
  18. Hbase Region的切分与合并【原理分析】
  19. 数据中台稳定性的“四高” | StartDT Tech Lab 18
  20. Mac OSX的开机启动配置

热门文章

  1. 成都睿铂|超详细三维模型单体化技术流程与标准
  2. 夏津一中2021高考成绩查询,2021德州市地区高考成绩排名查询,德州市高考各高中成绩喜报榜单...
  3. 软考高级之系统架构设计师系列【1】软考介绍
  4. 我应该在我的博客上写什么? 介绍如何撰写初学者容易担心的文章
  5. Random Walk(随机游走)
  6. SQL 之 ROW_NUMBER() OVER函数用法
  7. 理科有计算机类哪些专业吗,计算机专业有哪些。 是文科还是理科
  8. Pytorch 使用不同版本的 cuda,跟使用不同版本的cuda进行编译扩展库,其实TensorFlow也是一样
  9. 雍正王朝上部摘要—摘自电影最top
  10. CentOS7下mysql定时备份并发送邮件到指定邮箱脚本