您好,欢迎来到尔游网。
搜索
您的当前位置:首页MATLAB中的矩阵乘法与实际矩阵乘法的差异

MATLAB中的矩阵乘法与实际矩阵乘法的差异

来源:尔游网

        今天在做算法实现时,想用将算法矩阵化,这样子可以并行运算,虽然更耗内存,但起码效率会更好。为了验证矩阵化过程是否正确,我将矩阵化后所得结果和原来的串行计算结果相减,看看两者的之差的范数是否等于0。但我发现两者一直有个微小的差异,本着刨根问底的精神,于是仔细探究了一下,发现差异出现在其中的矩阵乘法,也就是说MATLAB里两个矩阵相乘与实际矩阵相乘的过程有差异。可以运行如下程序体会这种差异:

%verify_matrix_multiplication
clc;clear;close all;
M = 100;
N = 50;
A = rand(M,N);
B = rand(N,M);

AxB_1 = A*B;%mtimes(A,B)

AxB_2 = zeros(M,M);
for ii=1:M
    for jj=1:M
        AxB_2(ii,jj)=A(ii,:)*B(:,jj);
    end
end

norm(AxB_1-AxB_2)

这段代码就是随机生成两个矩阵A和B,其中AxB_1对应于利用MATLAB内置的乘法得到矩阵相乘结果,而AxB_2对应于使用串行方式得到矩阵相乘结果(即AxB_2第(ii,jj)个元素等于矩阵A的第ii行乘以矩阵B的第jj列,也就是严格按矩阵定义计算矩阵乘法)。

        运行以上程序可以发现,最后的norm(AxB_1-AxB_2)结果一直有个微小的差异。

        矩阵乘法对应于内置的mtimes函数,这个可以用"help *"得知:

        用“edit mtimes”打开mtimes函数,发现只有如下一段注释:

%*   Matrix multiply.
%   X*Y is the matrix product of X and Y.  Any scalar (a 1-by-1 matrix)
%   may multiply anything.  Otherwise, the number of columns of X must
%   equal the number of rows of Y.
%
%   C = MTIMES(A,B) is called for the syntax 'A * B' when A or B is an
%   object.
%
%   See also TIMES.

%   Copyright 1984-2005 The MathWorks, Inc.

因此,可以猜想,MATLAB应该是用某种等价方法更高效地实现矩阵乘法,等价实现过程中可能由于有限字长效应导致与实际的矩阵乘法结果有微小的差别。另外,我在octave中也试着运行了上面的程序,发现结果严格等于零~

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- axer.cn 版权所有 湘ICP备2023022495号-12

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务