[英]How to check for infinity values in Matlab
我有一個程序返回兩個變量,分別表示為X
和Y
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
這使您可以一次性檢測inf
和NaN
。
如果整個矩陣為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.