簡體   English   中英

如何在Matlab中檢查無窮大值

[英]How to check for infinity values in Matlab

我有一個程序返回兩個變量,分別表示為XY X的大小是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

來自help if

如果[條件]表達式的實部具有所有非零元素,則執行[在IF主體中]語句。

就你而言

>> 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

如果X 任何地方都存在NaN則會顯示該消息,並且

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

僅當X中的所有元素均為NaN才會顯示該消息。

還要看看isfinite這使您可以一次性檢測infNaN

如果整個矩陣為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM