我正在使用Matlab,想要检查一个列向量是否与另一个列向量精确到小数点后三位相等。为了实现这个目标,我尝试创建一个由0.001组成的数组,并检查它是否大于或等于该列向量。请问是否有比使用for循环创建这个数组更简单的方法?
有没有比for循环更简单的方法来创建这个数组?
是的,使用:
ones(size, 1) * myValue
例如
>> ones(5,1)*123
ans =
123
123
123
123
123
如果我理解正确的话,您有两个向量a和b,每个向量都有N个元素。您希望检查对于每个i(i <=N),是否满足abs(a(i)-b(i)) <= 0.001。
如果是这样,请执行以下操作:
vector_match = all(abs(a-b) <= 0.001);
vector_match
是一个布尔值。
例子:
a = rand(1000,1);
b = rand(1000,1);
idx = ( abs(a-b) < 0.001 );
[a(idx) b(idx)]
» ans =
0.2377 0.23804
0.0563 0.056611
0.01122 0.011637
0.676 0.6765
0.61372 0.61274
0.87062 0.87125
a = [ 0.005, -0.003 ];
x = find(a > 0.001);
就我个人而言,我发现在MATLAB中比较数字绝对是一场噩梦,但我也刚接触不久。重点是,当你进行比较时,可能会遇到浮点数比较问题,因此在尝试任何操作时要牢记这一点(如果我说错了或者有更好的解决方法,请大家指正)。
eps
。一般来说,浮点数比较会影响所有语言,而不仅仅是MATLAB。您可以阅读一些关于数值方法的资料,因为在大量操作后,数值误差可能会累积。例如,在某些情况下,它是sqrt(eps)
。 - rwongeps
,也知道浮点数比较,但是eps
并不总是有用的。谢谢。 - Noon Silk