问题描述:

It seems like both `inf`

and `Inf`

are exactly same in MATLAB (likewise `nan`

and `NaN`

, but not `Nan`

). Is there any difference?

`>> which inf`

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

>> which Inf

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

If they are the same, which one should be used in practice? For allocating arrays I have been using `x = inf(3,5)`

style following `zeros`

and `ones`

being all small caps. For assigning single value, I use `x = Inf`

. Do you think this is a consistent use?

Here are the conventions that MATLAB appears to use:

For Not-a-Number: Always use `NaN`

(Except in combinations such as `isnan()`

For Infinite: Use `inf`

for the function and use `Inf`

for the value (and `INFs`

for multiples, but this is not a command of course). Note that this is a bit tricky as it means that the evaluation of `inf`

gives `Inf`

.

Deduced from:

`help Inf`

: inf(N) is an N-by-N matrix of INFs.

`help nan`

: NaN(N) is an N-by-N matrix of NaNs.

`help isnan`

: For example, isnan([pi NaN Inf -Inf]) is [0 1 0 0].

Most idiomatically consistent would be `nan`

and `inf`

but MATLAB offers you the alternative way of capitalizing `NaN`

and `Inf`

, the way you will find it everywhere else, like in printouts, for example. Note that MATLAB *is* case sensitive. Nobody will use `Nan`

or `InF`

, so MATLAB does not provide these "aliases".

**EDIT:**
For use in a data vector, as in `[3.7, 1.2, NaN, 3.1]`

, I consistently find myself using `NaN`

as well, but the following experiment suggests *very strongly* that this use is **not** intimate with MATLAB's internal workings. Create a function `n = NaN()`

returning 4 and save it as `NaN.m`

in your current folder. Defining the vector like above will result in `[3.7, 1.2, 4.0, 3.1]`

showing that *MATLAB does not understand* `NaN`

*as a constant*, and will look up a function, which, in accordance with MATLAB idioms, should be spelled all lowercase.

Now let's quickly delete `NaN.m`

before we forget, and keep using `NaN`

in data columns.