design 发表于 2016-3-14 14:11

matlab 用diff函数求局部极值

  y(find(diff(sign(diff(y)))==-2)+1);
  假若 y=;
  diff(y) 是将y中后面的一个数减去前面的一个数,得到结果如下:
  -1 2 -1 2 2 2 -8
  sign(diff(y)) 中的sign是求符号函数,当数据大于0时为1,小于0时为-1,等于0 时为0,得结果如下:
  -1 1 -1 1 1 1 -1
  diff(sign(diff(y))) 其过程同上面的diff(y), 其结果如下:
  2 -2 2 0 0 -2
  find(……) 是找到上面序列中等于-2 的下标,然后再加1,(因为做一次diff后序列的数目会减小1),此处找到-2的位置是 2和6,加1后,变为3和7,对比原序列,可发现在下标为3和7处的确各有一个极大值存在。
  当使用 y(find(diff(sign(diff(y)))==-2)+1); 时,找到的则为极小值。
  其中,由find找到的为极值所在的位置,最后在y中的数据则为对应 的极值。



转自:http://blog.sina.com.cn/s/blog_c52f07550102v8wp.html

页: [1]
查看完整版本: matlab 用diff函数求局部极值