Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

islocalmin

计算局部最小值

说明

示例

当在数组、表或时间表的对应元素中检测到局部最小值时,TF = islocalmin(A) 将返回元素为 1 (true) 的逻辑数组。

示例

TF = islocalmin(A,dim) 指定要沿其进行运算的 A 的维度。例如,islocalmin(A,2) 计算矩阵 A 的每一行的局部最小值。

示例

TF = islocalmin(___,Name,Value) 使用一个或多个名称-值对组参数指定用于计算局部最小值的其他参数。例如,islocalmin(A,'SamplePoints',t) 计算 A 相对于时间向量 t 中包含的时间戳的局部最小值。

示例

对于上述任何语法,[TF,P] = islocalmin(___) 还会返回与 A 的每个元素对应的相对高差

示例

全部折叠

计算并绘制数据向量的局部最小值。

x = 1:100;
A = (1-cos(2*pi*0.01*x)).*sin(2*pi*0.15*x);
TF = islocalmin(A);
plot(x,A,x(TF),A(TF),'r*')

创建一个数据矩阵,然后计算每一行的局部最小值。

A = -25*diag(ones(5,1)) + rand(5,5);
TF = islocalmin(A,2)
TF = 5x5 logical array

   0   0   0   1   0
   0   1   0   0   0
   0   0   1   0   0
   0   0   0   1   0
   0   0   1   0   0

计算数据向量相对于向量 t 中的时间戳的局部最小值。使用 'MinSeparation' 参数计算相隔至少 45 分钟的最小值。

t = hours(linspace(0,3,15));
A = [2 4 6 4 3 7 5 6 5 10 4 -1 -3 -2 0];
TF = islocalmin(A,'MinSeparation',minutes(45),'SamplePoints',t);
plot(t,A,t(TF),A(TF),'r*')

指定用于指示连续最小值的方法。

计算包含连续最小值的数据的局部最小值。指示每个平台区的第一个最小值。

x = 0:0.1:5;
A = max(-0.75, sin(pi*x));
TF1 = islocalmin(A, 'FlatSelection', 'first');
plot(x,A,x(TF1),A(TF1),'r*')

指示每个平台区的所有最小值。

TF2 = islocalmin(A, 'FlatSelection', 'all');
plot(x,A,x(TF2),A(TF2),'r*')

计算数据向量的局部最小值和相对高差,然后用数据绘图。

x = 1:100;
A = peaks(100);
A = A(50,:);
[TF1,P] = islocalmin(A);
P(TF1)
ans = 1×2

    2.7585    1.7703

plot(x,A,x(TF1),A(TF1),'r*')
axis tight

通过指定最小相对高差要求,计算数据中最突出的最小值。

TF2 = islocalmin(A,'MinProminence',2);
plot(x,A,x(TF2),A(TF2),'r*')
axis tight

输入参数

全部折叠

输入数据,指定为向量、矩阵、多维数组、表或时间表。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable

运算维度,指定为正整数标量。默认情况下,islocalmin 沿其大小不为 1 的第一个维度进行运算。

例如,如果 A 是矩阵,则 islocalmin(A,1) 沿 A 的行进行运算,计算每一列的局部最小值。

islocalmin(A,2) 沿 A 的列进行运算,计算每一行的局部最小值。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: TF = islocalmin(A,'MinProminence',2)

最小相对高差,指定为逗号分隔的对组,该对组由 'MinProminence' 和一个非负标量组成。islocalmin 仅返回相对高差至少等于指定值的局部最小值。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

相对高差窗口,指定为以逗号分隔的对组,其中包含 'ProminenceWindow' 和一个正整数标量、由正整数组成的二元素向量、正持续时间标量或由正持续时间组成的二元素向量。该值定义一个包含若干邻点的窗口,这些邻点用于计算每个局部最小值的相对高差。

如果窗口值是一个正整数标量 k,则窗口以每个局部最小值为中心并且包含 k-1 个相邻元素。如果 k 是偶数,则窗口以当前元素和上一个元素为中心。如果局部最小值在平台区内,则 islocalmin 将整个平台区视为窗口的中心点。

如果该值是由正整数组成的二元素向量 [b f],则窗口包含局部最小值、其之前的 b 个元素和之后的 f 个元素。如果某局部最小值在平台区内,则窗口从平台区的第一个点之前的 b 个元素开始,在平台区的最后一个点之后的 f 个元素结束。

当输入数据是时间表或 'SamplePoints' 指定为 datetimeduration 向量时,窗口值的类型必须为 duration,并相对于样本点计算窗口。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

局部最小值连续重复时的平台区域指示符,指定为逗号分隔的对组,该对组由 'FlatSelection' 和下列值之一组成:

  • 'center' - 仅指示最小值平台区的中心元素。与平台区中心元素对应的 TF 元素为 1,其余元素为 0。

  • 'first' - 仅指示最小值平台区的第一个元素。与平台区第一个元素对应的 TF 元素为 1,其余元素为 0。

  • 'last' - 仅指示最小值平台区的最后一个元素。与平台区最后一个元素对应的 TF 元素为 1,其余元素为 0。

  • 'all' - 指示最小值平台区的所有元素。平台区所有元素对应的 TF 元素均为 1。

当使用 'MinSeparation''MaxNumExtrema' 名称-值对组时,平台区上的各点会被视为一个最小值点。

局部最小值之间的最小间隔,指定为逗号分隔的对组,该对组由 'MinSeparation' 和一个非负标量组成。间隔值按照与样本点向量相同的单位定义,默认情况下为 [1 2 3 ...]。当间隔值大于 0 时,islocalmin 选择指定间隔内最小的局部最小值,并忽略其他所有局部最小值。此过程会重复执行,直到再也检测不到局部最小值为止。

当样本点向量的类型为 datetime 时,间隔值的类型必须为 duration

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

检测到的最小值的最大数目,指定为逗号分隔的对组,该对组由 'MaxNumExtrema' 和一个正整数标量组成。islocalmin 找到的数目不超过指定的最突出最小值数,此值默认情况下等于运算维度的长度。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

样本点,指定为逗号分隔的对组,其中包含 'SamplePoints' 和一个向量。样本点表示数据在 A 中的位置。样本点不需要均匀采样,但必须进行排序并具有唯一元素。默认情况下,样本点向量是 [1 2 3 ...]

当输入数据为时间表时,islocalmin 不支持此名称-值对组。

数据类型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | datetime | duration

表变量,指定为逗号分隔的对组,包含 'DataVariables' 和变量名称、变量名称元胞数组、数值向量、逻辑向量、函数句柄或表 vartype 下标。'DataVariables' 值指示要对输入表或时间表的哪些变量进行运算。此值可以是以下选项之一:

  • 指定单个表变量名称的字符向量

  • 字符向量元胞数组,其中每个元素都是表变量名称

  • 表变量索引向量

  • 逻辑向量,每个元素分别对应一个表变量,其中 true 指示包括对应变量,false 指示不包括对应变量。

  • 函数句柄,以表变量作为输入并返回逻辑标量

  • vartype 下标

指定的表变量必须为数值或 logical 类型。

示例: 'Age'

示例: {'Height','Weight'}

示例: @isnumeric

示例: vartype('numeric')

输出参数

全部折叠

局部最小值指示符,以向量、矩阵或多维数组形式返回。TF 的大小与 A 相同。

数据类型: logical

相对高差,以向量、矩阵或多维数组形式返回。P 的大小与 A 相同。

如果输入数据的类型是有符号或无符号整数,则 P 是无符号整数。

详细信息

全部折叠

局部最小值的相对高差

局部最小值(或波谷)的相对高差根据该波谷相对其他波谷的深度和位置衡量其突出程度。

要测量一个波谷的相对高差,首先从该波谷向左右延伸出一条水平直线。找出这条直线与左右两侧数据的交点,交点应为另一波谷或数据的端点。将这些位置标记为左右区间的外部端点。然后找出左右区间内的最高波峰。取这两个波峰的较小值,测量从该波峰到波谷的垂直距离。此距离就是相对高差。

对于向量 x,最大相对高差不超过 max(x)-min(x)

扩展功能

在 R2017b 中推出