使对角矩阵和置换矩阵本身成为特殊的矩阵对象,并因此对某些运算使用更智能的算法,作为副作用,简化了处理零的微小差异。本节的内容也适用于稀疏矩阵,将在下一章中讨论。详见稀疏矩阵)
IEEE浮点标准定义了表达式的结果0*Inf
和0*NaN
像NaN
人们普遍认为这是一个好的妥协。然而,处理结构体化和稀疏性(包括Octave)的数值软件几乎总是在“数值零”和“假定零”之间进行区分。“数字零”是指出现在任何浮点值都可能出现的位置的零值。它通常作为显式值存储在内存中的某个位置。相反,“假定零”是矩阵结构体(对角线、三角形)或天冬氨度模式所隐含的零矩阵元素;它的值通常不会显式存储在任何位置,而是通过底层数据结构进行采样。
主要区别在于,假设的零,当乘以任何数字,或除以任何非零值时,返回总是零,即使当,例如,乘以Inf
或除以NaN
这种行为的原因是数字乘法实际上在任何地方都不从底层算法执行;结果只是假设为零。等价地,可以说,计算中涉及假定零的部分是象征性的,而不是数字的。
这种行为不仅有助于最直接、最有效地实现算法,而且还保留了某些有用的不变量,如:
所有这些自然的数学真理都会因为将假定的零视为数字1而无效。
请注意MATLAB没有严格遵循这一原则,并在某些情况下将总和零转换为数字零,而在其他情况下则没有这样做。到目前为止,还没有人打算在Octave中模仿这种行为。
假设零与数字零的影响示例:
Inf*眼(3)⇒ Inf 0 0 Inf 0 InfInf*speye(3)⇒压缩列稀疏(行=3,列=3,nnz=3[33%])(1,1)->Inf(2,2)->Inf(3,3)->InfInf*满(eye(3))⇒ Inf-NaNaNaNaNInf-NaN-NaNaNInf
diag(1:3)*[NaN;1;1]⇒ NaN 2 3解析(1:3,1:3,1:3)*[NaN;1;1]⇒ NaN 2 3[1,0,0;0,2,0;0,0,3]*[NaN;1;1]⇒ NaN-NaN-NaN
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号