在matlab中求矩阵中极大值两边的局部极小值

在matlab中求矩阵中极大值两边的局部极小值,matlab,max,min,minima,Matlab,Max,Min,Minima,对于一些“大数据”处理。绘制时,我的数据呈符号波状,但具有随机峰值。(想象一下,将每个矩阵位置的值与其位置相对应) 我知道如何找到峰值,但我需要一种方法,然后找到峰值两侧的局部极小值和矩阵中的位置。例如,如果数据为: 312101237-4-5-6-5-40 我需要的函数将返回如下内容:min,loc=[0,-6;4,11]如果您有权访问R2017b或更高版本,请检查and函数。如果您有权访问R2017b或更高版本,请检查and函数。MATLAB R2007a和更新版本有一个调用的函数(需要信号

对于一些“大数据”处理。绘制时,我的数据呈符号波状,但具有随机峰值。(想象一下,将每个矩阵位置的值与其位置相对应)

我知道如何找到峰值,但我需要一种方法,然后找到峰值两侧的局部极小值和矩阵中的位置。例如,如果数据为:

312101237-4-5-6-5-40


我需要的函数将返回如下内容:min,loc=[0,-6;4,11]

如果您有权访问R2017b或更高版本,请检查and函数。

如果您有权访问R2017b或更高版本,请检查and函数。

MATLAB R2007a和更新版本有一个调用的函数(需要信号处理工具箱)。您要查找的语法是

[pks,locs] = findpeaks(data)
具体来说,

>> [pks,locs] = findpeaks(-[3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0]) % note it's "-[data]"

pks =
     0     6
locs =
     4    11

负号是因为我们想要的是“谷”而不是“峰”,所以请确保不要忘记在之后否定
pks

MATLAB R2007a和更新版本有一个名为的函数(需要信号处理工具箱)。您要查找的语法是

[pks,locs] = findpeaks(data)
具体来说,

>> [pks,locs] = findpeaks(-[3 2 1 0 1 2 3 7 -4 -5 -6 -5 -4 0]) % note it's "-[data]"

pks =
     0     6
locs =
     4    11

负数是因为我们想要的是“谷”而不是“峰”,所以请确保不要忘记在之后否定
pks

因此,如果你知道如何在向量
x
中找到峰值,要找到最小值,只需找到
-x
的峰值。因此,如果你知道如何在向量
x
中找到峰值,要找到最小值,只需找到
-x
的峰值。虽然findpeaks适用于本例,但我的实际数据要长得多,恐怕这不起作用(很抱歉在我的原始问题中没有明确说明这一点)。假设数据是:A=[-93217-4-5-6-5-40-9];然后findpeaks(-A)将找到-9,而不是0和-6。@user2587726您可以配置
findpeaks
返回的极值的“显著性”。看见另外,您可以使用
符号(diff(data))
,然后在结果向量中查找
[-1]
。默认情况下,它会(实际上在您给出的示例中,它找不到-9,因为它们位于两端)。当我尝试这个方法时,我在位置5和12处得到了0和6的峰值(然后将其取反)。如果您还需要端点,只需将-inf添加到输入的两端即可。虽然findpeaks适用于此示例,但我的实际数据要长得多,恐怕无法使用(很抱歉,我在最初的问题中没有明确说明这一点)。假设数据是:A=[-93217-4-5-6-5-40-9];然后findpeaks(-A)将找到-9,而不是0和-6。@user2587726您可以配置
findpeaks
返回的极值的“显著性”。看见另外,您可以使用
符号(diff(data))
,然后在结果向量中查找
[-1]
。默认情况下,它会(实际上在您给出的示例中,它找不到-9,因为它们位于两端)。当我尝试这个方法时,我在位置5和12处得到了0和6的峰值(然后将其取反)。如果还需要端点,只需将-inf添加到输入的两端。