matlab - 在matlab中进行三角矩阵向量乘法的最快方法?

标签 matlab matrix

A是n*n上三角矩阵,x是n*1向量,有没有比A满的更快的方法在matlab中执行Ax,因为它应该需要n*(n+1)/2次乘法而不是n^2 次乘法。 谢谢!

最佳答案

我认为您无法提高性能,因为任何使用零的解决方案都会增加很多开销。提高性能的第一个想法是排除仅包含零的季度,我使用此函数做到了这一点:

@(x,y)[x(1:end/2,1:end/2)*y(1:end/2);x(end/2+1:end,:)*y]

这样就可以跳过 50% 的零乘法。

并将其与标准方式进行比较:

@(x,y)(x*y)

使用随机输入数据:

@(n)triu(rand(n))
@(n)rand(n,1)

结果表明简单的乘法更快。

enter image description here

执行时间(平均)

                 @(x,y)(x*y)    @(x,y)[x(1:end/2,1:end/2)*y(1:end/2);x(end/2+1:end,:)*y]
           2        0.000015        0.000027
          10        0.000015        0.000028
         100        0.000023        0.000041
        1000        0.000454        0.003433
        2000        0.003002        0.014185
        3000        0.006505        0.032233
        4000        0.011401        0.057172
        5000        0.018567        0.089489
       10000        0.076099        0.351794

总而言之,您正在执行 50% 无用的计算,但使用 MATLAB 非常高效的矩阵乘法实现。这可能是最好的选择。

关于matlab - 在matlab中进行三角矩阵向量乘法的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35568968/

相关文章:

c - MATLAB 中的 FFT 算法

android - 如何在不改变位置的情况下旋转位图

matlab - 查找数列的索引

matlab - 5x1 的子图彼此相邻 - 为什么我总是看到前两个正在消失?

python - 计算网格中点组合之间的距离

python - 我将如何在 python 中缩放二维数组?

ios - 将OpenCV的findHomography透视矩阵转换为iOS的CATransform3D

c - C 中矩阵的迭代器和指针

matlab - 尝试使用 MOTChallenge devkit 时出错

matlab - 在 Matlab 中检查有理函数是否简化为多项式