我之前在MATLAB向量中使用了逻辑索引,用于
之类的条件X = X(X < 6);
现在我想找到使用相同想法的本地极值,但是有“本地”条件。我会对像
这样的东西感兴趣X = X(X(i) > X(i-1) & X(i) > X(i + 1));
我知道这在向量的第一个和最后一个元素中不起作用,并且有更好的方法来找到局部极值。
这个问题与前一个问题(Getting FFT peaks from data)的不同之处在于我对找到最大值并不是特别感兴趣,而是能够使用逻辑索引与“本地”条件引用相邻元素矢量。
答案 0 :(得分:5)
你不能像你描述的那样直接这样做。您将不得不创建其他数据,这些数据本身可以进行逻辑测试,其输出可用于索引您的向量。在您的情况下,最好的方法是计算近似导数,并找到该导数的向下过零点。
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');
此代码生成以下图形,其中local-maxima是蓝色星形,local-minima是绿色圆圈。