创建一个单一值的数组
问题描述:
我正在使用matlab,想检查列向量是否与另一个使用3dp相等,为此,我试图创建一个满量程为0.001的数组并检查它是否更大大于或等于。有没有更简单的方法比for循环来创建这个数组还是没有?创建一个单一值的数组
答
您可以考虑在“查找”命令,如:
a = [ 0.005, -0.003 ];
x = find(a > 0.001);
FWIW,我发现在MATLAB比较数字是一个绝对的噩梦,但我也只是新手的话。重点是,当你进行比较时,你可能会遇到浮点比较问题,因此在尝试任何事情时请记住这一点(如果我错了,或者有一个漂亮的解决方法,请纠正我)
答
例如:
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
答
所以,让我知道这是否正确。
你有2载体,a
和b
每个拥有N
元素。你要检查是否每个i<=N
,abs(a(i)-b(i)) <= 0.001
。
如果这是正确的,你想:
vector_match = all(abs(a-b) <= 0.001);
vector_match
是一个布尔值。
答
有没有比for循环更简单的方法来创建这个数组?
是,使用
ones(size, 1) * myValue
例如
>> ones(5,1)*123
ans =
123
123
123
123
123
为了解决比较问题,你可以使用'eps'。通常,浮点比较会影响所有语言,而不仅仅是MATLAB。您可以阅读**数值方法中的一些材料**,因为在大量操作后,数字错误可能会累积。例如,在某些情况下,它是'sqrt(eps)'。 – rwong 2010-08-27 03:24:07
@wrong:当然,我知道'eps',我知道浮点比较,但是'eps'并不总是有帮助。不过谢谢。 – 2010-08-27 03:26:58