2016-11-06 16 views
0
>> a = [12345678.123456789, 12345678.123456788] 
a = 
    1.0e+07 * 
    1.234567812345679 1.234567812345679 
>> unique(a) 
ans = 
    1.0e+07 * 
    1.234567812345679 1.234567812345679 
>> uniquetol(a,eps) 
ans = 
    1.234567812345679e+07 

所以這兩個數字在eps的公差範圍內被認爲是相同的。在數組中使用`uniquetol`之後,我如何找回數組中的條目?

但是,獲得1.234567812345679e+07後。我想知道這a匹配1.234567812345679e+07eps公差內的條目(我以前使用uniquetoleps寬容,之後是合理的。)

find(abs(a-uniquetol(a,eps))<eps) 
ans = 
    2 

即使

>> find(abs(a-uniquetol(a,eps))<=eps) 
ans = 
    2 
>> find(abs(a-uniquetol(a,eps))<=eps*10) 
ans = 
    2 

不給我兩個條目。

只有像

>> find(abs(a-uniquetol(a,eps))<=eps*10000000) 
ans = 
    1  2 

>> find(abs(a-uniquetol(a,eps))<=eps(uniquetol(a,eps))) 
ans = 
    1  2 

會給我後面的第一項。 (find(abs(a-uniquetol(a,eps))<=eps(uniquetol(a,eps)))實際上並不總是適用於某些號碼。)

爲什麼?因爲我之前使用uniquetol(a,eps),而不是uniquetol(a,eps*10000000)。那麼爲什麼find必須設置爲比uniquetol更高的容差。

一般a不是隻有兩個條目,所以如果我設置的find過高或使用find(abs(a-uniquetol(a,eps))<=eps(uniquetol(a,eps)))公差就會翻一番a算上原來的條目。這是因爲uniquetol(a,eps)有時會產生兩個條目。

回答

0

您可以從uniquetol請求另外兩個輸出。從the documentation page for it[C,IA,IC] = uniquetol(___)返回索引向量IAIC,使得C = A(IA)A~C(IC)(或A(:)~C(IC)如果A是一個矩陣),其中,~裝置的值是彼此的公差範圍內。我認爲你基本上在這裏使用IC。例如,IC == 1爲您提供了A「映射」到C(1)的條目的邏輯掩碼。

相關問題