主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

islocalmin

计算局部最小值

说明

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

您可以通过将求局部极值任务添加到实时脚本,以交互方式使用 islocalmin 功能。

示例

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*')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

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

A = -25*diag(ones(5,1)) + rand(5,5);
TF = islocalmin(A,2)
TF = 5×5 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*')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

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

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

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*')

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

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

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

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

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

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

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

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

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

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers

输入参数

全部折叠

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

运算维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。

以一个 m×n 输入矩阵 A 为例:

  • islocalmin(A,1) 根据 A 的每列中的数据计算局部最小值,并返回一个 m×n 矩阵。

    islocalmin(A,1) column-wise operation

  • islocalmin(A,2) 根据 A 的每行中的数据计算局部最小值,并返回一个 m×n 矩阵。

    islocalmin(A,2) row-wise operation

对于表或时间表输入数据,不支持 dim,并且分别对每个表或时间表变量进行运算。

名称-值参数

全部展开

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

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

数据选项

全部展开

采样点,指定为由采样点值组成的向量或下表中的选项之一(当输入数据为表时)。样本点代表数据的 x 轴位置,必须为有序且包含唯一的元素。样本点不需要均匀采样。向量 [1 2 3 ...] 是默认值。

当输入数据是表时,可以使用以下选项之一将采样点指定为表变量。

索引方案示例

变量名称:

  • 字符串标量或字符向量

  • "A"'A' - 名为 A 的变量

变量索引:

  • 引用变量在表中位置的索引编号

  • 逻辑向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0false

  • 3 - 表中的第三个变量

  • [false false true] - 第三个变量

函数句柄:

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

  • @isnumeric - 一个包含数值的变量

变量类型:

  • vartype 下标,用于选择一个指定类型的变量

  • vartype("numeric") - 一个包含数值的变量

注意

当输入数据为 timetable 时,不支持此名称-值参量。时间表使用行时间向量作为采样点。要使用不同采样点,您必须编辑时间表,以便行时间包含所需的采样点。

示例: islocalmin(A,'SamplePoints',0:0.1:10)

示例: islocalmin(T,'SamplePoints',"Var1")

要对其执行操作的表变量,指定为逗号分隔的对组,其中包含 DataVariables 和下表中的选项之一。DataVariables 值指示输入表中哪些变量要检查局部最小值的存在。与指示的变量关联的数据类型必须为数值或 logical

对于 DataVariables 未指定的变量,第一个输出 TF 包含 false,除非 OutputFormat 的值为 'tabular'

索引方案要指定的值示例

变量名称

  • 字符串标量或字符向量

  • 字符串数组或字符向量元胞数组

  • pattern 对象

  • "A"'A' - 名为 A 的变量

  • ["A" "B"]{'A','B'} - 两个名为 AB 的变量

  • "Var"+digitsPattern(1) - 变量名为 "Var" 后跟一个数字

变量索引

  • 引用变量在表中位置的索引编号

  • 由数字组成的向量

  • 一个 logical 向量。通常,此向量的长度与变量的数目相同,但可以省略尾部的 0 (false) 值。

  • 3 - 表中的第三个变量

  • [2 3] - 表中的第二个和第三个变量

  • [false false true] - 第三个变量

函数句柄

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

  • @isnumeric - 所有包含数值的变量

变量类型:

  • vartype 下标,用于选择指定类型的变量

  • vartype("numeric") - 所有包含数值的变量

示例: islocalmin(T,'DataVariables',["Var1" "Var2" "Var4"])

输出数据类型,指定为下列值之一:

  • 'logical' - 对于表或时间表输入数据,以逻辑数组形式返回输出 TF

  • 'tabular' - 对于表输入数据,以表形式返回输出 TF。对于时间表输入数据,以时间表形式返回输出 TF

对于向量、矩阵或多维数组输入数据,不支持 OutputFormat

示例: islocalmin(T,'OutputFormat','tabular')

极值检测选项

全部展开

最小相对高差,指定为非负标量。islocalmin 仅返回相对高差至少等于指定值的局部最小值。

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

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

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

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

局部最小值连续重复时的平台区指示符,指定为以下值之一:

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

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

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

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

当使用 MinSeparationMaxNumExtrema 名称-值参量时,平台区上的各点会被视为一个最小值点。

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

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

要检测的最小值的最大数目,指定为正整数标量。islocalmin 找到的数目不超过指定的最突出最小值数,此值默认情况下等于运算维度的长度。

输出参量

全部折叠

局部最小值指示符,以向量、矩阵、多维数组、表或时间表形式返回。

除非 OutputFormat 的值为 'tabular',否则 TFA 的大小相同。如果 OutputFormat 的值为 'tabular',则 TF 只具有对应于指定的 DataVariables 的变量。

数据类型: logical

相对高差,以向量、矩阵、多维数组、表或时间表形式返回。

  • 如果 P 是向量、矩阵或多维数组,则 P 的大小与 A 相同。

  • 如果 P 是表或时间表,则 PA 的高度相同,并且只具有与指定的 DataVariables 对应的变量。

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

算法

islocalmin 标识输入数据中的所有局部最小值(即波谷),并按以下步骤进行操作来计算每个局部最小值的相对高差。局部最小值的相对高差根据该波谷相对其他波谷的高度和位置衡量其突出程度。

  1. 从当前波谷向左向右绘制一条水平线。当水平线段到达数据边或与数据相交时停止绘制。

  2. 标识水平线上方的峰值。

  3. 使用这些峰值中的最低值作为基值。相对高差是当前局部最小值与基值高度之间的绝对差。

Plot of data with valleys. A horizontal line runs through the current valley. The lowest peak above the prominence line is marked.

替代功能

实时编辑器任务

您可以通过将求局部极值任务添加到实时脚本,以交互方式使用 islocalmin 功能。

Find Local Extrema task in the Live Editor

扩展功能

全部展开

版本历史记录

在 R2017b 中推出

全部展开