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]