Matlab矩阵乘法和转置精度

时间:2015-07-01 13:11:36

标签: matlab matrix-multiplication transpose

下一个脚本应打印出7x7全1矩阵,因为方程式已满足。

A = rand(5,7);
B = rand(5,7);

C = (A' * B)';
D =  B' * A;

C == D

而不是这种答案:

ans =

 1     1     1     1     0     1     1
 1     1     1     1     0     1     0
 1     1     1     1     1     1     1
 1     1     1     1     0     0     0
 1     0     1     1     1     1     1
 0     0     1     1     1     1     1
 0     1     1     0     1     1     1

我认为这是一个浮点精度问题,因为format long的数字在C和D上有所不同。

  • 我做错了什么?
  • 哪里出错了?
  • 我该如何避免呢?

1 个答案:

答案 0 :(得分:3)

你没有做错任何事 - 计算机具有有限的精度,你的计算显示它 - 就像1e6 + 0.1 - 1e6一样(在Matlab中尝试)。避免它的一种方法是使用一些库来获得任意精度 - 但它不会解决问题。它,只是将问题推向越来越小的数字。

有关更多信息,请参阅以下链接:

http://floating-point-gui.de/errors/comparison/

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

顺便说一句,format long与实际精度无关,它只是设置数字格式为显示的方式。