比较C ++ Armadillo和Matlab中的矩阵指数

时间:2016-11-06 09:42:27

标签: c++ matlab armadillo

我一直在尝试将Matlab矩阵指数的速度与Armadillo C ++矩阵指数进行比较。我总是被告知,如果你想要最快的代码,使用C ++,但我执行的测试似乎暗示Matlab矩阵指数方式更快。如果有人在其他地方验证过,或者我做错了什么,有人可以告诉我吗?

以下是我实施它的方式:

我测试的矩阵很稀疏,有点奇怪,但不是特别特别。重要的是它们具有2 ^ N乘2 ^ N的尺寸。设I = [1 0; 0 1]是单位矩阵,X = [0 1; 1 0]是转置矩阵。然后,对于N = 1,2,3,...,我生成了矩阵,

A_1 = X
A_2 = kron(X,I) + kron(I,X)
A_3 = kron(X,I,I) + kron(I,X,I) + kron(I,I,X)
A_4 = kron(X,I,I,I) + kron(I,X,I,I) + kron(I,I,X,I) + kron(I,I,I,X)

等等......大小为2 ^ N乘2 ^ N,其中kron(A,B,C,...)是矩阵A,B,C ......的Kronecker乘积,它可以在Armadillo和Matlab中被称为kron(A,kron(B,kron(C,...)))。

我在Armadillo v7.300.1中使用了expmat函数,使用了clock()来记录时间,并在命令行中用Mac编译

c++ exptest.cpp -o exptest -larmadillo -std=c++14

在MatlabR2015a中,我使用了expm函数并使用timeit来记录时间。

N       Matlab expm(A) (secs)       Armadillo expmat(A) (secs)
1       2.1654E-4                   4.25E-4
2       1.3655E-4                   1.09E-4
3       1.5788E-4                   1.26E-4
4       1.4571E-4                   4.17E-4
5       2.7004E-4                   6.34E-4
6       4.4781E-4                   0.003055
7       0.0012                      0.018804
8       0.0096                      0.191102
9       0.0598                      2.11156
10      0.4210                      18.5047
11      3.1949                      150.917

Matlab矩阵指数是否比Armadillo矩阵指数快得多,或者我做错了什么?另外,矩阵指数的最快计算资源是什么?

0 个答案:

没有答案