* 和手工逐个分量进行的矩阵乘法之间的差异问题(MATLAB)

Problem of difference in between matrix multiplication done by * and by components by components by hand (MATLAB)

我对 Matlab 上矩阵乘法的准确性有疑问。我将用一个例子来解释这一点。 让

 A=[0.1256, 0.25789; 0.00018, 0.68741];
B=[0.1578, 0.24471; 0.12801, 0.99701];
s=0;
while s<100
    for i=1:2
        for j=1:2
    A(i,j)=A(i,j)+0.0125;
    B(i,j)=B(i,j)+0.2470;
        end
    end
    D=A*B;
    d11=A(1,1)*B(1,1)+A(1,2)*B(1,2);
    d12=A(1,1)*B(1,2)+A(1,2)*B(2,2);    
    d21=A(2,1)*B(1,1)+A(2,2)*B(1,2);
    d22=A(2,1)*B(2,1)+A(2,2)*B(2,2);
    DD=[d11, d12; d21, d22];
    s=s+1;
end

我有一个算法,其中矩阵 A 和 B 分量的值在每次迭代时都会升级。在这个算法中,还有一个公式涉及定义一个矩阵作为升级后的A和B的乘积。

我的问题是如果我在每次迭代中通过手动执行矩阵乘法的组件来定义这些新矩阵组件,我将获得与我定义的情况略有不同的结果这个新矩阵是通过执行矩阵乘法来完成的,矩阵乘法是由 Matlab 由“*”完成的,而不是我的组件。 最后的结果是:

DD=[71,8082684418998,   73,0622074848998;
79,4048550050998,   80,8251256858998]
and
D=[71,6322976788998 73,0622074848998
79,1787592580998    80,9710216918998]

可以吗?先谢谢了

这与数值精度无关,但您的手动矩阵乘法是错误的。这将是正确的版本:

d11=A(1,1)*B(1,1)+A(1,2)*B(2,1);
d12=A(1,1)*B(1,2)+A(1,2)*B(2,2);    
d21=A(2,1)*B(1,1)+A(2,2)*B(2,1);
d22=A(2,1)*B(1,2)+A(2,2)*B(2,2);

但是你看这个手动矩阵乘法很容易出错,所以最好只做A*B