如何在 Matlab 中检查无穷大值

How to check for infinity values in Matlab

我有一个程序,其中 returns 2 个变量,表示为 XYX 的大小为 3 x 5,Y 的大小为 3 x 3。我想检查这些值是否为无穷大,但 Matlab 没有这样做。一般来说,这就是我对任何矩阵所做的,但这段代码不适用于图中显示的矩阵。正确的方法是什么?

clear all


  Y = [

      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi
      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi
      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi];

  if (isnan(Y))
      disp( ' values in Y are infinity')
  end

  X =  1.0e+017 *[

      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi  -7.8517 - 0.0000i
      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi  -3.9259 - 0.0000i
      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi      NaN +    NaNi  -1.9629 - 0.0000i];
  if (isnan(X))
      disp( ' values in X are infinity')
  end

如果整个矩阵是 NaN,您的代码将显示 values in X are infinity。如果您的矩阵中甚至只有一个 none-NaN 元素,它也不会显示任何内容。
如果您希望矩阵中的每个 NaN 都有一个 disp( ' values in X are infinity'),您应该遍历矩阵并检查每个元素。用两个嵌套循环来做:

for i1=1:row
   for j1=1:col
      if (isnan(X(i1,j1)))
         disp( ' values in X are infinity')
      end
   end
end

来自 help if:

The statements [in the IF's body] are executed if the real part of the [conditional] expression has all non-zero elements.

在你的情况下,

>> isnan(X)
ans =
     1     1     1     1     0
     1     1     1     1     0
     1     1     1     1     0

如果在 if 条件下按原样使用,它将评估为 false

通常最好是明确的:

if any(isnan(X(:))
    disp('X contains a NaN'); end
如果 NaN anywhere in X

将显示消息

if all(isnan(X(:))
    disp('X is all-NaN'); end

仅当 X 中的 所有 元素为 NaN 时才会显示消息。

另请查看 isfinite - 这使您可以一次性检测 infNaN