主要内容

ismembertol

成员设置在公差范围内

描述

例子

投资局= ismembertol (一个B托尔返回一个包含logical的数组1真正的的元素一个在元素的容许范围内吗B.否则,数组包含逻辑0).两个值,u而且v,都在容忍范围内

abs(u-v) <= tol*max(abs([A(:);B(:)]))))

也就是说,ismembertol尺度的托尔根据数据的大小进行输入。

ismembertol类似于ismember.而ismember进行精确的比较,ismembertol使用容差执行比较。

例子

投资局= ismembertol (一个B的默认容差1 e-6用于单精度输入和1 e-12用于双精度输入。

例子

投资局LocB= ismembertol(___也返回一个数组,LocB中包含索引位置的B对于中的每个元素一个它是B.您可以使用以前语法中的任何输入参数。

例子

___= ismembertol(___名称,值使用先前语法中使用任何输入或输出参数组合的一个或多个名称-值对参数指定的附加选项。例如,ismembertol (A, B, ByRows,真的)比较一个而且B并返回一个逻辑列向量。

例子

全部折叠

创建一个向量x.得到第二个向量y通过改造和不改造x.的四舍五入差异y

X = (1:6)'*pi;Y = 10 ^log10(x);

验证x而且y取差就不相等。

x - y
ans =6×110-14年× 0.0444 0 0 0 0 -0.3553

使用ismember的元素x都在y.的ismember函数执行精确的比较,并确定中的一些矩阵元素x不是y

Lia = ismember(x,y)
lia =6x1逻辑阵列0 1 1 1 10 0

使用ismembertol使用小公差进行比较。ismembertol对公差范围内的元素一视同仁,并确定所有在公差范围内的元素xy

LIA = ismembertol(x,y)
LIA =6x1逻辑阵列1 1 1 1 1 1 1 1

默认情况下,ismembertol查找元素那是在容忍范围之内的,但它也能发现一个在公差范围内的矩阵。

创建一个数字矩阵,一个.得到第二个矩阵,B通过改造和不改造一个.此转换引入舍入差异B

A = [0.05 0.11 0.18;0.18 0.21 0.29;0.34 0.36 0.41;...0.46 0.52 0.76;0.82 0.91 1.00];B = log10(10.^A);

使用ismember求的行数一个都在Bismember执行精确的比较,从而确定中的大多数行一个不是B,尽管有些行只相差很小。

lia = ismember(A,B,“行”
lia =5x1逻辑阵列0 0 0 0 1

使用ismembertol使用小公差执行行比较。ismembertol将公差范围内的行视为相等,从而确定中的所有行一个B

LIA = ismembertol(A,B,“ByRows”,真正的)
LIA =5x1逻辑阵列1 1 1 1 1 1

创建两个随机数向量,并确定其中的值一个也是B,使用一个公差。指定OutputAllIndices作为真正的返回元素的所有下标B在相应元素的公差范围内一个

rng(5) A = rand(1,15);B = rand(1,5);[LIA,LocAllB] = ismembertol(A,B,0.2,“OutputAllIndices”,真正的)
LIA =1x15逻辑阵列1 0 1 0 1 1 1 1 1 1 1 1 1 10 0
LocAllB =1×15单元格数组第1至5列{2x1 double} {[0]} {2x1 double} {[0]} {3x1 double}} 6至10列{2x1 double} {[4]} {3x1 double} {3x1 double} {2x1 double} 11至15列{[0]}{2x1 double} {4x1 double} {2x1 double} {[0]}

求元素的平均值B在数值的容许范围内(13).细胞LocAllB {13}中元素的所有索引B都是可以容忍的(13)

(13)
Ans = 0.4413
allB = B(LocAllB{13})
allB =1×40.2741 0.4142 0.2961 0.5798
avb = mean(allB)
avb = 0.3911

默认情况下,ismembertol使用表单的容差测试abs(u-v) <= tol*DS,在那里DS根据输入数据的大小自动缩放。您可以指定不同的DS值与DataScale选择。然而,绝对公差(其中DS是标量)不基于输入数据的大小进行缩放。

首先,比较两个具有一定距离的小值每股收益分开。指定托尔而且DS求出公差范围方程Abs (u-v) <= 10^-6

X = 0.1;Ismembertol (x, exp(log(x)) 10^-6,“DataScale”, 1)
ans =逻辑1

接下来,增加值的大小。计算中的舍入误差exp(日志(x))与值的大小成正比,具体来说是每股收益(x).即使这两个大的值是一个距离每股收益彼此之间,每股收益(x)现在大了很多。因此,10 ^ 6不再是合适的容忍。

X = 10^10;Ismembertol (x, exp(log(x)) 10^-6,“DataScale”, 1)
ans =逻辑0

的默认(缩放)值来纠正此问题DS

Y = [0.1 10^10];ismembertol (Y, exp(日志(Y)))
ans =1x2逻辑阵列1 1

创建一组随机的2-D点,然后使用ismembertol要将这些点分组到与一小组查询点具有相似(在公差范围内)x坐标的垂直带中,B.使用以下选项ismembertol

  • 指定ByRows作为真正的,因为点坐标在一个而且B

  • 指定OutputAllIndices作为真正的返回中所有点的指数一个它们的x坐标在查询点的公差范围内B

  • 指定DataScale为(1正)对x坐标使用绝对公差,而忽略y坐标。

A = rand(1000,2);B = [(0:.2:1)',0.5*ones(6,1)];[LIA,LocAllB] = ismembertol(B, A, 0.1,“ByRows”,真的,...“OutputAllIndices”,真的,“DataScale”(1正))
LIA =6x1逻辑阵列1 1 1 1 1 1 1 1
LocAllB =6×1单元格数组{94x1双}{223x1双}{195x1双}{212x1双}{187x1双}{89x1双}

在图中绘制点一个在每个查询点的容错范围内B

持有情节(B(: 1)、B (:, 2),“x”k = 1:length(LocAllB) plot(A(LocAllB{k},1), A(LocAllB{k},2),“。”结束

图中包含一个轴。坐标轴包含7个line类型的对象。

输入参数

全部折叠

查询数组,指定为标量、向量、矩阵或多维数组。输入一个而且B一定是满了。

如果您指定ByRows选项,然后一个而且B必须有相同数量的列。

数据类型:|

查询数组,指定为标量、向量、矩阵或多维数组。输入一个而且B一定是满了。

如果您指定ByRows选项,然后一个而且B必须有相同数量的列。

数据类型:|

比较公差,指定为正的实标量。ismembertol尺度的托尔使用输入数组中的最大绝对值进行输入一个而且B.然后ismembertol使用所得到的缩放比较公差来确定哪些元素在一个也是会员吗B.如果两个元素在彼此的容忍范围内,那么ismembertol认为他们是平等的。

两个值,u而且v,都在容忍范围内abs(u-v) <= tol*max(abs([A(:);B(:)]))))

若要指定绝对公差,请同时指定两者托尔“DataScale”名称-值对。

例子:Tol = 0.05

例子:Tol = 1e-8

例子:Tol = eps

数据类型:|

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:LIA = ismembertol(A,B,'ByRows',true)

输出索引类型,指定为逗号分隔的对,由“OutputAllIndices”,要么(默认),真正的0,或1ismembertol解释数字0作为和数字1作为真正的

OutputAllIndices真正的,ismembertol函数返回第二个输出,LocB,作为单元格数组。单元格数组包含的索引所有元素B在相应值的公差范围内一个.也就是说,每个细胞在LocB中的值一个,每个单元格中的值对应于中的位置B

例子:[LIA,LocAllB] = ismembertol(A,B,tol,'OutputAllIndices',true)

行比较切换,指定为逗号分隔的对,由“ByRows”,要么(默认),真正的0,或1ismembertol解释数字0作为和数字1作为真正的.使用此选项可在中查找行一个而且B这是在容忍范围内的。

ByRows真正的

  • ismembertol比较一个而且B通过分别考虑每一列。因此,一个而且B必须是具有相同列数的二维数组。

  • 如果对应行在一个是否在公差范围内B,然后投资局包含逻辑1真正的).否则,它包含逻辑0).

两行,u而且v,都在容忍范围内all(abs(u-v) <= tol*max(abs([A;B]))))

例子:LIA = ismembertol(A,B,tol,'ByRows',true)

数据的规模,指定为由逗号分隔的对组成“DataScale”或者是标量或者向量。指定DataScale作为一个数值标量,DS,将公差测试改为:abs(u-v) <= tol*DS

当与the一起使用时ByRows选项时,DataScaleValue也可以是向量。在本例中,向量的每个元素指定DS中的对应列一个.中的值DataScale向量是,然后ismembertol中忽略相应的列一个

例子:LIA = ismembertol(A,B,'DataScale',1)

例子:[LIA,LocB] = ismembertol(A,B,'ByRows',true,'DataScale',[eps(1) eps(10) eps(100)])

数据类型:|

输出参数

全部折叠

的逻辑索引一个,返回为包含逻辑的向量或矩阵1真正的)元素(或行)所在的位置一个B(在公差内)。在其他地方,投资局包含逻辑0).

投资局尺寸和一个,除非指定ByRows选择。这样的话,投资局列向量的行数和一个

地点在B,作为向量、矩阵或单元格数组返回。LocB中元素(或行)的索引B都是在一个(在公差内)。LocB包含0只要有一个元素一个不是会员吗B

如果OutputAllIndices真正的,然后ismembertol返回LocB作为单元格数组。单元格数组包含的索引所有元素B在相应值的公差范围内一个.也就是说,每个细胞在LocB中的值一个,每个单元格中的值对应于中的位置B

LocB尺寸和一个,除非指定ByRows选择。这样的话,LocB列向量的行数和一个

扩展功能

在R2015a中引入