我有一个程序返回2个变量,表示为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
答案 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
- 这样您就可以一次性检测inf
和NaN
。
答案 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