2013-01-10 49 views
6

好像都infInf在MATLAB(同樣nanNaN,但不Nan)都完全相同。有什麼區別嗎?inf或Inf? nan或NaN?

>> which inf 
built-in (/Applications/MATLAB_R2011b.app/toolbox/matlab/elmat/inf) 
>> which Inf 
built-in (/Applications/MATLAB_R2011b.app/toolbox/matlab/elmat/Inf) 

如果它們是相同的,哪一個應該在實踐中使用?對於分配陣列,我一直使用x = inf(3,5)樣式,其中zerosones都是小寫字母。爲了分配單個值,我使用x = Inf。你認爲這是一個一貫的用途嗎?

+1

如果我已經正確地閱讀了它,那麼你對'Inf'和'inf'的使用確實看起來是一致的。 –

回答

2

下面是MATLAB似乎使用的約定:

不-A-數:始終使用NaN(除組合,如isnan()

無限:使用inf的功能和使用Inf該值(和INFs爲倍數,但這當然不是一個命令)。注意,這是有點麻煩,因爲它意味着inf評價給出Inf

德都來自:

help Inf:inf(N)是INF的N乘N矩陣。 NaN(N)是NaN的N乘N矩陣。

help isnan:例如,isnan([pi NaN Inf -Inf])是[0 1 0 0]。

12

大多數慣用一致將naninf但MATLAB爲您提供資本NaNInf,你會發現它在其他地方一樣,在打印輸出的方式,例如的另一種方式。請注意,MATLAB 區分大小寫。沒有人會使用NanInF,所以MATLAB不提供這些「別名」。

編輯: 對於數據載體的使用,如[3.7, 1.2, NaN, 3.1],我一直髮現自己使用NaN爲好,但下面的實驗表明非常強烈這個用途與MATLAB的內部運作親密。創建一個函數n = NaN()返回4並將其保存爲NaN.m在當前文件夾中。定義如上所示的向量將導致[3.7, 1.2, 4.0, 3.1]顯示MATLAB不理解NaN作爲常量,並且將查找函數,根據MATLAB慣用法,它應該拼寫爲全部小寫。

現在讓我們在忘記之前快速刪除NaN.m,並在數據列中繼續使用NaN

+0

但是MATLAB總是將值顯示爲'Inf'和'NaN',所以當賦值一個值時,使用'Inf'而不是'inf'(這被認爲是一個賦予'Inf'數組的函數)是合理的@丹尼斯建議。 – Memming

+0

@Memming,看看我的編輯,我最初的回答是在'nan(3)'中使用。*打印輸出*是一回事,但在MATLAB *語言中沒有恆定的'NaN' *。原來它總是被解析爲一個函數。 –

+0

(Re:關於你的編輯)真的。如果你嘗試'nan.m',它也完全一樣。因此,既不是一個常量或保留關鍵字(儘管MATLAB抱怨這個函數是一個MATLAB內置函數)。我的問題只是關於哪一個是更好的約定,我認爲這是更多的文化。不需要爲此開始火焰戰爭。 :) – Memming