我一直在尝试将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矩阵指数快得多,或者我做错了什么?另外,矩阵指数的最快计算资源是什么?