Matlab 求局部极小值和局部极大值

Matlab 求局部极小值和局部极大值,matlab,vector,linear-algebra,Matlab,Vector,Linear Algebra,我想找到给定向量的局部极小值和局部极大值。假设给定向量如下所示: speed = 0.0002 0.0008 0.0014 0.0027 0.0037 0.0047 0.0054 0.0053 0.0053 0.0058 0.0060 0.0063 0.0062 0.0065 0.0062 0.0061 0.0060 0.0057 0.0062 0.0057 0.0053 0.0050 0.0047 0.0065 0.0049 0.0048 0.0033 0.0033 0.0041 0.004

我想找到给定向量的局部极小值和局部极大值。假设给定向量如下所示:

speed =

0.0002
0.0008
0.0014
0.0027
0.0037
0.0047
0.0054
0.0053
0.0053
0.0058
0.0060
0.0063
0.0062
0.0065
0.0062
0.0061
0.0060
0.0057
0.0062
0.0057
0.0053
0.0050
0.0047
0.0065
0.0049
0.0048
0.0033
0.0033
0.0041
0.0049
0.0063
0.0075
0.0085
0.0105
0.0108
0.0109
0.0105
0.0105
0.0099
0.0098
0.0099
0.0099
0.0105
0.0103
0.0112
0.0108
0.0088
0.0079
0.0066
0.0055
0.0058
0.0049
0.0049
0.0055
0.0060
0.0051
0.0055
0.0060
0.0053
0.0047
0.0058
0.0050
0.0044
0.0033
0.0022
0.0008
0.0015
0.0010
0.0011
0.0024
0.0028
0.0024
0.0016
0.0009
0.0009
0.0009
0.0015
0.0015
0.0025
0.0031
0.0030
0.0042
0.0051
0.0060
0.0065
0.0054
0.0012
0.0043
0.0059
0.0070
0.0078
0.0076
0.0082
0.0087
0.0088
0.0095
0.0101
0.0100
0.0110
0.0103
0.0111
0.0120
0.0118
0.0116
0.0115
0.0121
0.0120
0.0145
0.0107
0.0119
0.0110
0.0116
0.0102
0.0086
0.0076
0.0071
0.0055
0.0066
0.0063
0.0077
0.0052
0.0059
0.0061
0.0036
0.0047
0.0053
0.0027
0.0020
0.0011
0.0041
0.0034
0.0034
0.0019
0.0022
0.0008
0.0001
0.0007
0.0009
0.0010
0.0010
0.0001
0.0007
0.0014
0.0016
0.0016
0.0013
0.0008
0.0008
0.0005
0.0004
0.0002
0.0001
0.0004
0.0005
0.0006
0.0005
0.0006
0.0006
0.0004
0.0002
0.0000
0.0001
0.0001
0.0002
0.0003
0.0004
0.0004
0.0005
0.0007
0.0008
0.0007
0.0006
0.0005
0.0006
0.0006
0.0004
0.0002
0.0003
0.0006
0.0005
0.0005
0.0010
0.0012
0.0014
0.0020
0.0028
0.0039
0.0044
0.0061
0.0074
0.0082
0.0091
0.0102
0.0108
0.0110
0.0117
0.0128
0.0133
0.0148
0.0153
0.0155
0.0150
0.0146
0.0137
0.0130
0.0113
0.0110
0.0107
0.0112
0.0114
0.0113
0.0104
0.0101
0.0095
0.0088
0.0083
0.0076
0.0057
0.0047
0.0043
0.0046
0.0053
0.0063
0.0078
0.0070
0.0062
0.0053
0.0051
0.0055
0.0048
0.0053
0.0052
0.0055
0.0065
0.0075
0.0078
0.0081
0.0067
0.0044
0.0061
0.0047
0.0032
0.0033
0.0028
0.0019
0.0007
0.0017
0.0016
0.0025
0.0034
0.0037
0.0044
0.0039
0.0037
0.0029
0.0030
0.0025
0.0022
0.0025
0.0027
0.0028
0.0031
0.0029
0.0025
0.0025
0.0025
0.0024
0.0022
0.0021
0.0019
0.0020
0.0020
0.0016
0.0016
0.0015
0.0013
0.0011
0.0011
0.0010
0.0009
0.0008
0.0006
0.0005
0.0004
0.0002
0.0000
0.0002
0.0003
0.0004
0.0006
0.0005
0.0004
0.0003
0.0004
0.0003
0.0003
0.0004
0.0006
0.0004
0.0004
当我在Matlab中使用命令
plot(speed)
处理这个向量时,我得到了下图:

如何找到给定向量的最大值和最小值?例如,在上图中,我的目标是找到图中显示的三个最小值/最大值。
我有很多这样的向量,我想写一个代码,让所有人都能找到局部极小值和极大值

首先,您需要定义什么是极值(最大值或最小值),也就是说,哪个尺度被认为是合适的,因为您的曲线实际上比3或4的局部最大值和最小值多得多。因此,寻找一阶导数与
diff
的零交叉将产生大量虚假的微峰。一个选择是在之前平滑它。但是,使用标准工具可能更容易

尝试从信号处理工具箱


在那里,您可以使用各种参数指定刻度,例如
'MinPeakDistance'
'MinPeakHeight'
'Threshold'
等。

如果您想要局部最小值,只需搜索
-速度的最大值即可。但是,当我想找到局部极小值时,为什么还要搜索极大值呢?因为
findpeaks
只找到极大值,但你仍然可以利用数学的力量得到你想要的。