2010-03-24 11 views
5

Bildiğiniz gibi, birçok durumda, bir matrisin bazı öğelerini işaretlemeye gerek vardır. Örneğin, ağırlıklı bitişik matrisimiz olduğunda ve grafiğimiz tam olarak bağlanmadığında, bu düğümler arasında kenar olmadığını gösteren bazı öğeleri işaretlememiz gerekir. Soru şu nasıl yapılır? Matriste bu elementlere NaN veya Inf koymak daha mı iyidir? ya da başka bir şey (-1 gibi)?MATLAB'de bazı öğeleri işaretlemenin en iyi yolu nedir? NaN veya Inf kullanarak? veya başka bir şey?

cevap

10

Tamamen kasaya bağlıdır. Örnekte, iyi bir çözüm verdiğinizde, kenarlar ağırlıklandırılmış olduğundan ve birçok amaç için 0 ağırlık kenarının kenarlara eşdeğer olmaması nedeniyle sıfırlar kullanmak olabilir. Akış/kesim algoritmaları gibi şeyler yapıyorsanız bu doğrudur.

Genellikle NaN ve Inf arasında seçim yaparken, NaN ile giderdim.

Inf*(-1) = -Inf 
Inf+(-Inf) = NaN 
Inf > 10 = True 
etc... 

Temiz bir çözüm aksi bağlantısı geçerli olduğu gerçek vardır Boolean başka matris, ve yanlış tutmak olabilir: Inf "geçersiz" işaretleyici olarak bulmayabileceği bazı özellikleri vardır. Biraz bellek harcıyor, ama matrisiniz çok büyük değilse, size verebileceği kod okunabilirliği buna değer.

+3

NaN da bazı sürprizlere sahip: NaN == NaN yanlış döndürüyor! Yani olanqual() kullanmak yerine, olanqualwithnans() işlevi kullanılmalıdır. – Mikhail

+4

Olması gerekenler() – Jonas

+2

Bu, NaN == NaN'nin False olduğu anlamına gelir. örneğin bkz .: http://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server. –

İlgili konular