主要内容

uniquetol.

公差范围内的独特价值

描述

例子

C= Uniquetol(一种返回唯一的元素一种使用公差。两个值,V.,如果是在容忍范围内

ABS(U-V)<= tol * max(abs(a(:)))

那是,uniquetol.鳞片输入基于数据幅度。

uniquetol.类似于独特。然而独特执行确切的比较,uniquetol.使用容差执行比较。

例子

C= Uniquetol(一种使用默认的容差1E-6用于单精度输入和1E-12用于双精度输入。

例子

[CIA.我知道了] = Uniquetol(___返回索引向量IA.我知道了,这样c = a(ia)A〜C(IC)(要么A(:)〜C(IC)如果一种是一个矩阵),在哪里意味着值在彼此的容差范围内。您可以在以前的语法中使用任何输入参数。

例子

[___] = Uniquetol(___名称,价值使用以前语法中的任何输入或输出参数组合使用一个或多个名称 - 值对参数指定的其他选项。例如,Uniquetol(A,'Byrows',True)确定唯一行一种

例子

全部收缩

创建矢量X。获得第二个向量y通过转换和未转变X。这种转变介绍了圆截止差异y

x =(1:6)'* pi;y = 10. ^ log10(x);

验证Xy通过取得差异并不相同。

X-Y.
ans =.6×110.-14×0.0444 0 0 0 0 0 -0.3553

采用独特在连接载体中找到唯一的元素[x; y]。这独特函数执行精确的比较并确定某些值X不完全等于值y。这些是具有非零差异的相同元素X-Y.。因此,C包含值出现要重复。

c =唯一([x; y])
C =8×13.1416 3.1416 6.2832 9.4248 12.5664 15.7080 18.8496 18.8496

采用uniquetol.使用小容差执行比较。uniquetol.将容差的元素视为平等。

c = Uniquetol([x; y])
C =6×13.1416 6.2832 9.4248 12.5664 15.7080 18.8496

默认情况下,uniquetol.寻找独特的元素这在宽容范围内,但它也可以找到独特的在容差范围内的矩阵。

创建一个数字矩阵,一种。获得第二个矩阵,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];b = log10(10. ^ a);

采用独特找到唯一的行一种B.。这独特函数执行精确的比较并确定连接矩阵中的所有行[a; b]是独一无二的,尽管一些行只有少量不同。

独特([a; b],'行'
ans =.8×3.0.0500 0.1100 0.1800 0.0500 0.1100 0.1800 0.1800 0.2100 0.2900 0.1800 0.2100 0.2900 0.3400 0.3600 0.4100 0.3400 0.3600 0.4100 0.4600 0.5200 0.7600 0.4600 0.5200 0.7600

采用uniquetol.找到唯一的行。uniquetol.对待公差范围内的行。

Unquetol([a; b],'byrows',真的)
ans =.4×30.0500 0.1100 0.1800 0.1800 0.2100 0.2900 0.2900 0.3400 0.3600 0.4100 0.4600 0.5200 0.7600

创建矢量,X。获得第二个向量,y,通过转换和不转化X。这种转变介绍了对某些元素的圆截止差异y

x =(1:5)'* pi;y = 10. ^ log10(x);

结合Xy进入单个载体,一种。采用uniquetol.重建一种,处理公差范围内的值。

a = [x; y]
A =10×13.1416 6.2832 9.4248 12.5664 15.7080 3.1416 6.2832 9.4248 12.5664 15.7080
[C,IA,IC] = Unquetol(a);Newa = C(IC)
纽约=10×13.1416 6.2832 9.4248 12.5664 15.7080 3.1416 6.2832 9.4248 12.5664 15.7080

您可以使用纽瓦姆==.或使用精确平等的功能是平等的要么独特在后续代码中。

d1 =独特(a)
D1 =6×13.1416 3.1416 6.2832 9.4248 12.5664 15.7080
d2 =独特(牛排)
D2 =5×13.1416 6.2832 9.4248 12.5664 15.7080

创建2-D样本点的云,约束为半径圆圈0.5以点为中心 1 2 1 2

x = rand(10000,2);insidecircle = sqrt((x(:,1) - 。5)。^ 2+(x(:,2) - 。5)。^ 2)<0.5;y = x(insidecircle,:);

找到一组减少的点,使得原始数据集的每个点在一个点的容差范围内。

tol = 0.05;c = Uniquetol(y,tol,'byrows',真的);

将减少的点组绘制为原始数据集顶部的红色点。红色点是原始数据集的所有成员。所有的红色点至少是一段距离分开。

绘图(Y(:,1),Y(:,2),'。') 抓住平等的绘图(C(:,1),c(:,2),'.r''Markersize',10)

图包含轴。轴包含2个类型的型号。

创建随机数的向量,并使用公差确定唯一元素。指定OutputAllindices.作为真的返回在唯一值的容差范围内的元素的所有索引。

a = rand(100,1);[c,ia] = Uniquetol(a,1e-2,'OutputalAllindices',真的);

找到在容差范围内的元素的平均值C(2)

C(2)
ANS = 0.0318.
alla = a(ia {2})
alla =3×10.0357 0.0318 0.0344
Avea =卑鄙(ALLA)
Avea = 0.0340.

默认情况下,uniquetol.使用表单的公差测试ABS(U-V)<= TOL * DS, 在哪里DS.自动地基于输入数据的大小。您可以指定不同的DS.与之使用的价值DEACASCALE.选项。但是,绝对的宽容(哪里DS.是标量)不根据输入数据的幅度扩展。

首先,比较两个距离的小值eps.分开。指定DS.使公差方程式内容:ABS(U-V)<= 10 ^ -6

x = 0.1;Unquetol([x,exp(log(x))],10 ^ -6,'dataScale'1)
ans = 0.1000.

接下来,增加值的幅度。计算中的圆关闭错误exp(log(x))与值的大小成比例,具体到EPS(x)。即使两个大值是距离eps.彼此,EPS(x)现在更大了。所以,10 ^ -6不再是合适的耐受性。

x = 10 ^ 10;Unquetol([x,exp(log(x))],10 ^ -6,'dataScale'1)
ans =.1×210.10.×1.0000 1.0000

使用默认值(缩放)值来纠正此问题DS.

格式Y = [0.1 10 ^ 10];Uniquetol([y,exp(log(y))])
ans =.1×210.10.×0.000000000010000 1.000000000000000

创建一组随机的2-D点,然后使用uniquetol.将点分组到具有相似(在公差范围内)X坐标的垂直频带中。使用这些选项uniquetol.

  • 指定Byrows.作为真的由于点坐标位于行的行中一种

  • 指定OutputAllindices.作为真的返回具有在彼此容差范围内具有X坐标的所有点的索引。

  • 指定DEACASCALE.作为[1款]使用绝对容差X- 忽略的同时y-协调。

a = rand(1000,2);DS = [1款];[c,ia] = Unquetol(a,0.1,'byrows', 真的,......'OutputalAllindices', 真的,'dataScale',DS);

绘制每个频段的点和平均值。

抓住为了K = 1:长度(IA)图(A(IA {K},1),A(IA {K},2),'。')valenai =平均值(a(ia {k},:));情节(平均(1),平均(2),'xr'结尾

图包含轴。轴包含20个类型的20个物体。

输入参数

全部收缩

查询数组,指定为标量,矢量,矩阵或多维数组。一种必须饱满。

数据类型:单身的|双倍的

比较耐受,指定为正,真正的标量。uniquetol.鳞片输入使用输入数组中的最大绝对值输入一种。然后uniquetol.使用由此产生的缩放比较公差来确定哪些元素一种是独一无二的。如果两个元素一种然后是彼此的容忍度uniquetol.认为他们是平等的。

两个值,V.,如果是在容忍范围内ABS(U-V)<= tol * max(abs(a))

要指定绝对容差,请指定两者'dataScale'名称值对。

例子:tol = 0.05

例子:tol = 1e-8

例子:tol = eps.

数据类型:单身的|双倍的

名称值对参数

指定可选的逗号分离对名称,价值论点。名称是参数名称和价值是相应的价值。名称必须出现在引号内。您可以以任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:c = Uniquetol(a,'byrows',true)

输出索引类型,指定为逗号分隔的对组成'OutputalAllindices'和任何一种错误的(默认),真的0., 要么1uniquetol.解释数字0.作为错误的和数字1作为真的

什么时候OutputAllindices.真的, 这uniquetol.函数返回第二个输出,IA.作为单元阵列。单元格数组包含指数全部元素一种这在宽度范围内C。也就是说,每个细胞IA.对应于一个值C,每个单元格中的值对应于位置一种

例子:[C,IA] = Unquetol(A,Tol,'OutputalLindices',True)

行比较切换,指定为逗号分隔对组成'byrows'和任何一种错误的(默认),真的0., 要么1uniquetol.解释数字0.作为错误的和数字1作为真的。使用此选项查找行一种在宽容之内是独一无二的。

什么时候Byrows.真的

  • 一种必须是2-D阵列。

  • uniquetol.比较行的行一种通过单独考虑每列。对于两行在彼此的容差范围内,每个列必须具有宽容。

  • 每一行一种是在宽容的情况下C。但是,没有两行C在彼此的宽容范围内。

两排,V.,如果是在容忍范围内所有(ABS(U-V)<= tol * max(abs(a),[],1))

例子:C = Uniquetol(A,Tol,'Byrows',True)

数据的规模,指定为逗号分隔对组成'dataScale'和标量或矢量。指定DEACASCALE.作为数字标量,DS.,改变容差测试ABS(U-V)<= TOL * DS

当与之一起使用时Byrows.选项,这是DEACASCALE.价值也可以是矢量。在这种情况下,矢量的每个元素指定DS.对于相应的列一种。如果是值DEACASCALE.矢量是INF., 然后uniquetol.忽略相应的列一种

例子:C = Uniquetol(a,'dataScale',1)

例子:[c,ia,ic] = Unquetol(a,'byrows',true,'dataScale',[EPS(1)EPS(10)EPS(100)])

数据类型:单身的|双倍的

输出参数

全部收缩

独特的元素一种(在公差范围内),作为向量或矩阵返回。如果一种是一排矢量,然后C也是一排矢量。否则,C是一列栏矢量。元素C按升序排序。每个元素一种在容忍元素范围内C,但没有两个要素C在彼此的宽容范围内。

如果是Byrows.选项是真的, 然后C是包含唯一行的矩阵一种。在这种情况下,行中的行C通过第一列按升序排序。每一行一种是在宽容的情况下C,但没有两行C在彼此的宽容范围内。

指数到一种,作为索引的列向量向索引到第一次发生重复元素,或作为单元阵列。IA.一般满足c = a(ia),以下例外:

  • 如果是Byrows.选项是真的, 然后c = a(ia,:)

  • 如果是OutputAllindices.选项是真的, 然后IA.是一个小区阵列和c(i)〜a(ia {i})在哪里意味着值在彼此的容差范围内。

指数到C,作为索引的列向量返回。我知道了满足以下属性,其中意味着值在彼此的容差范围内。

  • 如果一种是一个矢量,然后A〜C(IC)

  • 如果一种是一个矩阵,然后A(:)〜C(IC)

  • 如果是Byrows.选项是真的, 然后a〜c(ic,:)

提示

  • 可以有多个有效的C满足条件的输出,没有两个要素C在彼此的宽容范围内。这uniquetol.函数只返回一个有效的输出。

    uniquetol.排列lexically排序,然后从最低值开始,以在容差内找到唯一的值。结果,改变输入的排序可以改变输出。例如,Unquetol(-a)可能不会给出相同的结果- 蛋白质(a)

扩展能力

在R2015A介绍