我以前在MATLAB向量中使用过逻辑索引,其条件如下
X = X(X < 6);然而,现在我想用同样的想法找到局部极值,但要有“本地”条件。我对这样的事情感兴趣
X = X(X(i) > X(i-1) & X(i) > X(i + 1));我知道在向量的第一个和最后一个元素中,这是行不通的,并且有更好的方法来寻找局部极值。
这个问题不同于上一个问题(Getting FFT peaks from data),因为我并不特别感兴趣于寻找最大值,而是能够使用带有“局部”条件的逻辑索引来引用向量中的相邻元素。
发布于 2015-03-11 14:15:30
您不能像您所描述的那样直接这样做。您必须创建额外的数据,这些数据本身可以进行逻辑测试,其输出可以用于对向量进行索引。在你的例子中,最好的方法是计算一个近似导数,然后找出这个导数的向下零点点。
x = rand(1,50);
xDiff = diff(x);
xZeroCross = diff(sign(xDiff));
indexUp = find(xZeroCross>0)+1;
indexDown = find(xZeroCross<0)+1;
figure();
plot(1:50,x,'r',indexDown,x(indexDown),'b*',indexUp,x(indexUp),'go');此代码生成以下图,其中局部极大值为蓝色星,局部极小为绿色圆.

https://stackoverflow.com/questions/28988014
复制相似问题