如何在 Matlab 中检查无穷大值
How to check for infinity values in Matlab
我有一个程序,其中 returns 2 个变量,表示为 X
和 Y
。
X
的大小为 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
- 这使您可以一次性检测 inf
和 NaN
。
我有一个程序,其中 returns 2 个变量,表示为 X
和 Y
。
X
的大小为 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
- 这使您可以一次性检测 inf
和 NaN
。