2011-11-11 26 views

cevap

4

min(abs(data - b)) nasıl olur?

İşte
i_lower = find(data <= b,1,'last'); 
i_higher = find(data >= b,1,'first'); 

lower_than_b = data(i_lower) 
higher_than_b = data(i_higher) 
+8

Aboneyi unutma ... – madth3

9

bulmak kullanabilirsiniz. data numaralı vektörün sıralanması gerekmez ve b olumlu veya olumsuz olabilir. dizini döndürür

ind=knnsearch(data',b) c=data(ind)

(ya endeksleri dizi):

[~,I] = min(abs(data-b)); 
c = data(I); 
20

başka yöntemdir: veriler sıralanır eğer

0
data = [1 1.2 1.3 1.5 1.8] 

b = 1.23 

find(abs(data-b)==min(abs(data-b))) 
+1

Bu, bu gönderiye zaten yerleştirilmiş olandan daha fazla bir şey eklemiyor. – rayryeng

1

Bu yöntem birden aradığınız b yılında unsur vardır duruma Şüphe cevabı genelleştirir data'daki en yakın öğenin (veya öğelerin)'da listelenen öğelere göre ind.

Aranacak dizinin bir sütun vektörü olması gerektiğinden, verilerin aktarıldığını unutmayın. Birden fazla eleman olsaydı, o zaman aynı zamanda bir sütun vektörü olmalıdır. Ayrıca, bu yöntem 2., 3., 4. ... en yakın komşuları vermek için genelleştirilebilir (belgelere bakınız).

veri yüksek boyutlu olması da durum ile genelleştirildiğinde (d boyutları daha sonra test ve bd sütun olurdu ise).

İlgili konular