>> 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+07
的eps
公差內的條目(我以前使用uniquetol
與eps
寬容,之後是合理的。)
但
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)
有時會產生兩個條目。