Octave 和 Scilab 中 fix() 的不可预见行为

计算科学 八度 科学实验室
2021-12-04 11:35:28

在 Octave 和 Scilab 中使用函数 fix() 时,我遇到了一些奇怪的结果。以下是 Scilab 控制台的输入和输出,但在 Octave 中也会发生完全相同的事情。

我从以下矩阵开始:

A=[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
   0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0;
   0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0;
   0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0;
   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1;
   1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0;
   0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0;
   0,0,1,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0,0;
   0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,1,0;
   0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1;
   0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0;
   0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0;
   1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1;
   0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0]

我想把它带到减少的行梯队形式:

-->rref(A)
 ans  =

   1.   0.   0.   0.   0.   0.   0.   0.   0.   1.   1.   0.   0.   1.   2.   1.   0.   1.          1.
   0.   1.   0.   0.   0.   0.   0.   0.   0.  -1.   0.   0.   0.  -1.  -1.   0.   0.   0.          0.
   0.   0.   1.   0.   0.   0.   0.   0.   0.   0.  -1.   0.   0.   0.  -1.  -1.   0.  -1.         -1.
   0.   0.   0.   1.   0.   0.   0.   0.   0.  -1.  -1.   0.   0.   0.  -1.   0.   0.  -1.388D-16   0.
   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.  -1.   0.   0.  -1.  -1.  -1.   0.  -1.          0.
   0.   0.   0.   0.   0.   1.   0.   0.   0.   1.   1.   0.   0.   1.   1.   1.   0.   0.          0.
   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   1.   0.   0.   0.   1.   0.   0.   1.          0.
   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.  -1.  -1.  -1.   0.  -1.         -1.
   0.   0.   0.   0.   0.   0.   0.   0.   1.   1.   1.   0.   0.   1.   1.   0.   0.   1.          0.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   1.   0.   0.          1.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   1.   1.   1.   1.   0.   0.          0.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   1.   1.          1.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.          0.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.          0.

到目前为止一切都很好,我猜,但是当我现在在最后获得的矩阵上使用 fix() 来获取整数条目时,我在 (6,10) 和 (6,11) 处得到零,这是我预期的:

-->fix(rref(A))
 ans  =

   1.   0.   0.   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   1.   2.   1.   0.   1.   1.
   0.   1.   0.   0.   0.   0.   0.   0.   0.  -1.   0.   0.   0.  -1.  -1.   0.   0.   0.   0.
   0.   0.   1.   0.   0.   0.   0.   0.   0.   0.  -1.   0.   0.   0.  -1.  -1.   0.  -1.  -1.
   0.   0.   0.   1.   0.   0.   0.   0.   0.  -1.  -1.   0.   0.   0.  -1.   0.   0.   0.   0.
   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.  -1.   0.   0.  -1.  -1.  -1.   0.  -1.   0.
   0.   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.   0.   0.   1.   1.   1.   0.   0.   0.
   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   1.   0.   0.   0.   1.   0.   0.   1.   0.
   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   0.   0.  -1.  -1.  -1.   0.   0.  -1.
   0.   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   0.   1.   1.   0.   0.   0.   0.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   1.   0.   0.   0.   1.   0.   0.   1.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   1.   1.   1.   1.   0.   0.   0.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   1.   1.   1.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.
   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.   0.

那里发生什么了?

0个回答
没有发现任何回复~