21.5零元素处理的差异

使对角矩阵和置换矩阵本身成为特殊的矩阵对象,并因此对某些运算使用更智能的算法,作为副作用,简化了处理零的微小差异。本节的内容也适用于稀疏矩阵,将在下一章中讨论。详见稀疏矩阵)

IEEE浮点标准定义了表达式的结果0*Inf0*NaNNaN人们普遍认为这是一个好的妥协。然而,处理结构体化和稀疏性(包括Octave)的数值软件几乎总是在“数值零”和“假定零”之间进行区分。“数字零”是指出现在任何浮点值都可能出现的位置的零值。它通常作为显式值存储在内存中的某个位置。相反,“假定零”是矩阵结构体(对角线、三角形)或天冬氨度模式所隐含的零矩阵元素;它的值通常不会显式存储在任何位置,而是通过底层数据结构进行采样。

主要区别在于,假设的零,当乘以任何数字,或除以任何非零值时,返回总是零,即使当,例如,乘以Inf或除以NaN这种行为的原因是数字乘法实际上在任何地方都不从底层算法执行;结果只是假设为零。等价地,可以说,计算中涉及假定零的部分是象征性的,而不是数字的。

这种行为不仅有助于最直接、最有效地实现算法,而且还保留了某些有用的不变量,如:

所有这些自然的数学真理都会因为将假定的零视为数字1而无效。

请注意MATLAB没有严格遵循这一原则,并在某些情况下将总和零转换为数字零,而在其他情况下则没有这样做。到目前为止,还没有人打算在Octave中模仿这种行为。

假设零与数字零的影响示例:

Inf * eye (3)
⇒
   Inf     0     0
     0   Inf     0
     0     0   Inf

Inf * speye (3)
⇒
Compressed Column Sparse (rows = 3, cols = 3, nnz = 3 [33%])

  (1, 1) -> Inf
  (2, 2) -> Inf
  (3, 3) -> Inf

Inf * full (eye (3))
⇒
   Inf   NaN   NaN
   NaN   Inf   NaN
   NaN   NaN   Inf

diag (1:3) * [NaN; 1; 1]
⇒
   NaN
     2
     3

sparse (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-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2