今天需要进行矩阵计算,构造了目标矩阵c以及需要进行操作的矩阵a、b:
a =
0 0 0
0.5000 0.3000 0.4000
0 0 0
b =
0 0.1000 0
0 0.2000 0
0 0.3000 0
c =
0 0.1000 0
0.5000 0.0600 0.4000
0 0.3000 0
进行这个实验的主要目的是在探究稀疏矩阵点乘时如何保留那些仅在一个矩阵上非零的值。经过计算后将计算结果与预期结果c进行对比发现结果不对,我们的目标是得到一个全1的逻辑数组,但实际结果得到的是如下的结果:
3×3 logical 数组
1 0 1
1 1 1
1 0 1
将两者相减后,发现是因为浮点数计算时产生的精度误差导致的。
ans =
1.0e-16 *
0 -0.2776 0
0 0 0
0 0.5551 0
解决方案是人为在较小的位置上进行四舍五入,参考博客(2条消息) Matlab常见问题之 浮点数精度问题_耳东小白的小笔记本儿-CSDN博客_matlab 浮点运算精度,使用roundn进行解决。