如何在Matlab

时间:2017-01-11 06:34:16

标签: matlab matrix zero

我有一个程序返回2个变量,表示为XYX的大小为3乘5,Y的大小为3乘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

2 个答案:

答案 0 :(得分:3)

来自help if

  

如果[条件]表达式的实部具有所有非零元素,则执行[在IF正文中]的语句。

在你的情况下,

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

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

通常最好是明确的:

if any(isnan(X(:))
    disp('X contains a NaN'); end
如果NaN中有X ,则

会显示消息

if all(isnan(X(:))
    disp('X is all-NaN'); end
仅当X中的所有元素均为NaN时,

才会显示该消息。

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

答案 1 :(得分:0)

如果整个矩阵为values in X are infinity,则代码将显示NaN。如果矩阵中只有一个非NaN元素,它将不会显示任何内容 如果您希望矩阵中的每个disp( ' values in X are infinity')都有NaN,则应通过矩阵检查每个元素。使用两个嵌套循环执行此操作:

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