NAN=Not a number!
而且|A|=0 ,表明A是奇异矩阵,A的逆矩阵不存在!A\b是承认A的逆矩阵存在的情况下才能使用的!所以当然解不出来。
对于该题
R(A)=R(A,b)<n 方程应该有无穷多解
NaN = Not a Number 一般出现这个东西的原因有两个
1)你的程序里出现0作为分母的运算,这个时候可以考虑把被除矩阵整体加一个无限小量,例如1e-10。这样可以消除0作分母的现象。
2)如果上面这个做法不管用,一般就是你自己的算法和编程的问题了,导致结果不收敛,发散。多次迭代后无穷大,超过了matlab允许的数值范围。这个时候你必须去仔细检查你的程序了。
希望能帮到你啊!~
你可以把你的
sum+=V[i][k]D[k]V[j][k];
之前的V[i][k], D[k]和V[j][k]都print出来看看值是多少。
我估计也许你的初始化函数有问题,这样数组里面的值可能是垃圾值,不是可表示的浮点数都是有可能的。所以结果也就不正确了。
另:你的程序没有D和V数组的定义,不能编译。
NaN的二进制表示方式,如下:
e: all 1s
mantissa: != 0
再贴一段吧,讲得挺详细的:
NaN 用于处理计算中出现的错误情况,比如 00 除以 00 或者求负数的平方根。由上面的表中可以看出,对于单精度浮点数,NaN 表示为指数为 emax + 1 = 128(指数域全为 1),且尾数域不等于零的浮点数。IEEE 标准没有要求具体的尾数域,所以 NaN 实际上不是一个,而是一族。不同的实现可以自由选择尾数域的值来表达 NaN,比如 Java 中的常量 FloatNaN 的浮点数可能表达为 01111111110000000000000000000000,其中尾数域的第一位为 1,其余均为 0(不计隐藏的一位),但这取决系统的硬件架构。Java 中甚至允许程序员自己构造具有特定位模式的 NaN 值(通过 FloatintBitsToFloat() 方法)。比如,程序员可以利用这种定制的 NaN 值中的特定位模式来表达某些诊断信息。
定制的 NaN 值,可以通过 FloatisNaN() 方法判定其为 NaN,但是它和 FloatNaN 常量却不相等。实际上,所有的 NaN 值都是无序的。数值比较 *** 作符 <,<=,> 和 >= 在任一 *** 作数为 NaN 时均返回 false。等于 *** 作符 == 在任一 *** 作数为 NaN 时均返回 false,即使是两个具有相同位模式的 NaN 也一样。而 *** 作符 != 则当任一 *** 作数为 NaN 时返回 true。这个规则的一个有趣的结果是 x!=x 当 x 为 NaN 时竟然为真。
可以产生 NaN 的 *** 作如下所示:
(INF: 无穷大)
+: INF + (+/- INF)
: 0 INF
/: 0/0, INF/INF
%: x%0, INF%y
sqrt: x<00
此外,任何有 NaN 作为 *** 作数的 *** 作也将产生 NaN。用特殊的 NaN 来表达上述运算错误的意义在于避免了因这些错误而导致运算的不必要的终止。比如,如果一个被循环调用的浮点运算方法,可能由于输入的参数问题而导致发生这些错误,NaN 使得 即使某次循环发生了这样的错误,也可以简单地继续执行循环以进行那些没有错误的运算。你可能想到,既然 Java 有异常处理机制,也许可以通过捕获并忽略异常达到相同的效果。但是,要知道,IEEE 标准不是仅仅为 Java 而制定的,各种语言处理异常的机制不尽相同,这将使得代码的迁移变得更加困难。何况,不是所有语言都有类似的异常或者信号(Signal)处理机制。
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
结果是一个数列,开始的数是数值,后来的数就成"nan" 了
解析:
可能有一个地方没有结束语句
或者是数据类型设置不够
不知道源程序不知道
以上就是关于程序计算结果显示NaN是什么原因全部的内容,包括:程序计算结果显示NaN是什么原因、Matlab出现nan怎么处理、C++的NaN问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)