【问题标题】:Matrix multiplication computation time in MATLABMATLAB中的矩阵乘法计算时间
【发布时间】:2014-12-25 05:49:34
【问题描述】:

在 David Lay 的线性代数中,他问两种矩阵计算方式中哪一种更快:

  1. A*(A*x)
  2. (A*A)*x

其中Anxn 矩阵,xnx1 向量(矩阵积定义明确。)

我制作了一个 matlab 程序,并亲眼目睹了它的更高维度,我对此深信不疑。但是我也尝试过 n=1 的情况,在这种情况下,奇怪的是选项 1 仍然比选项 2 更快,但事实并非如此。

有人知道为什么 case n=1 显示得更快吗?它只是稍微快一点

【问题讨论】:

  • 两个选项我都得到了 0.000002 秒。
  • @user3100754,请附上你用来做基准测试的代码,我们可以自己看看。
  • @lanpa:两次计算的 2 微秒读数已四舍五入。这是不准确的。好的方法是进行 100 次计算,然后测量这 100 次计算的时间(for 循环在 tic toc 内。)

标签: matlab matrix


【解决方案1】:

对于n=1 的情况,Ax 都是标量,因此这两个运算都包含两个标量乘法。这些操作应该花费几微秒(或更短)并且可能比您的计时器的分辨率更快。该问题更关注n 的更大(更现实)值。

【讨论】:

  • 我正在使用一个循环来重复计算 100 次,然后程序才吐出一个计算时间结果。所以计时器是准确的。这确实是我的问题的目的:关于 n=1 用于学习目的。
【解决方案2】:

好的。弄清楚了。平均而言,计算时间是相同的。我的代码中有一个逻辑错误。现在,如果更快在一次运行中显示更少的时间(这本身就是一个整体平均值),那么在下一次运行中它会比另一次运行更慢。这是matlab代码:

close all
clc
clear all
n=1
for j=1:100
tic
for i=1:100
a=round(10*rand(n,n));
x=round(10*rand(n,1));
(a*a)*x;
end
d=toc;
f(j)=d*1e3;
end

for j=1:100
tic
for i=1:100
a=round(10*rand(n,n));
x=round(10*rand(n,1));
(a)*(a*x);
end
e=toc;
t(j)=e*1e3;
end


slower=mean(f)
faster=mean(t)
plot(1:100,f)
hold on
plot(1:100,t,'r')
legend('slower','faster')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2012-01-22
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多