matlab - 矩阵乘法给出两个不同的答案

标签 matlab matrix-multiplication

下面是一些简单的代码,展示了我所看到的内容:

A = randn(1,5e6)+1i*randn(1,5e6);
B = randn(1,5e6)+1i*randn(1,5e6);

sum(A.*conj(B)) - A*B'
sum(A.*conj(B)) - mtimes(A,B')
A*B' - mtimes(A,B')

现在,底部显示的三种方法应该做同样的事情,所以答案应该为零,对吗?错误的!差异很小,但还没有小到可以忽略不计的程度。另外,误差随着A和B长度的增加而增加。

有谁知道这些方法之间的实际区别是什么?我知道代码中可能写入了快捷方式,但如果可能的话,我想对其进行量化。 Matlab 会在任何地方发布差异吗?我环顾四周,但没有找到任何东西。

最佳答案

这可能与执行操作的顺序有关。例如,

sum(A.*conj(B)) - fliplr(A)*fliplr(B)'

给出的结果不同于

sum(A.*conj(B)) - A*B'

或者,更引人注目的是,

A*B' - fliplr(A)*fliplr(B)'

给出非零结果,与您的测试顺序相同。

所以我敢打赌,根据方法 (sum*),Matlab 在内部以不同的顺序执行操作,这很可能解释了不同的舍入您观察到的错误。

关于matlab - 矩阵乘法给出两个不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20474950/

相关文章:

image - 将绘图保存到 matlab : difference between saveas and print 中的图像文件中

matlab - 使用 MATLAB 提取文本文件中 "Data starts on next line:"以外的数据

matlab - Matlab 中的基本文件 I/O

installation - 更新后的 MATLAB 应用程序安装为新的独特应用程序

python - 矩阵-矩阵乘法的函数 numpy.dot()、@ 和方法 .dot() 之间有什么区别?

python - 与常数的矩阵乘法

r - GAUSS 到 R 代码转换

c - 我们如何从共享内存中分配动态内存?

matlab - 在MatLab中将矩阵的列与3d矩阵的2d矩阵切片相乘

python - 对大型数据集(2 亿个变量)运行逻辑回归的有效方法是什么?