2010-08-27 198 views
3

我正在使用matlab,想检查列向量是否与另一个使用3dp相等,为此,我试图创建一个满量程为0.001的数组并检查它是否更大大于或等于。有没有更简单的方法比for循环来创建这个数组还是没有?创建一个单一值的数组

回答

0

您可以考虑在“查找”命令,如:

a = [ 0.005, -0.003 ]; 
x = find(a > 0.001); 

FWIW,我发现在MATLAB比较数字是一个绝对的噩梦,但我也只是新手的话。重点是,当你进行比较时,你可能会遇到浮点比较问题,因此在尝试任何事情时请记住这一点(如果我错了,或者有一个漂亮的解决方法,请纠正我)

+1

为了解决比较问题,你可以使用'eps'。通常,浮点比较会影响所有语言,而不仅仅是MATLAB。您可以阅读**数值方法中的一些材料**,因为在大量操作后,数字错误可能会累积。例如,在某些情况下,它是'sqrt(eps)'。 – rwong 2010-08-27 03:24:07

+0

@wrong:当然,我知道'eps',我知道浮点比较,但是'eps'并不总是有帮助。不过谢谢。 – 2010-08-27 03:26:58

1

例如:

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 
4

所以,让我知道这是否正确。

你有2载体,ab每个拥有N元素。你要检查是否每个i<=Nabs(a(i)-b(i)) <= 0.001

如果这是正确的,你想:

vector_match = all(abs(a-b) <= 0.001); 

vector_match是一个布尔值。

10

有没有比for循环更简单的方法来创建这个数组?

是,使用

ones(size, 1) * myValue 

例如

>> ones(5,1)*123 

ans = 

    123 
    123 
    123 
    123 
    123 
相关问题