2010-08-27 196 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 
相關問題