Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab矩阵乘法与转置精度_Matlab_Matrix Multiplication_Transpose - Fatal编程技术网

Matlab矩阵乘法与转置精度

Matlab矩阵乘法与转置精度,matlab,matrix-multiplication,transpose,Matlab,Matrix Multiplication,Transpose,下一个脚本应该打印出一个7x7 all-one矩阵,因为等式已经满足 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

下一个脚本应该打印出一个7x7 all-one矩阵,因为等式已经满足

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
我认为这是一个浮点精度问题,因为使用
格式long
时,C和D中的数字不同

  • 我做错了什么
  • 哪里出了问题
  • 我怎样才能避免呢

你没有做错任何事-计算机的精度是有限的,你的计算揭示了这一点-就像
1e6+0.1-1e6
(在Matlab中尝试)。避免这种情况的一种方法是使用一些库来实现任意精度——但它不会“解决”它,只是将问题推向越来越小的数字

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

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

我认为这是一个浮点精度问题[…]。对因为
rand
返回浮点数,所以不应该期望矩阵
C
D
完全相等。喜欢像
norm(C-D)这样的东西