Сравнение экспоненциальной матрицы в C++ Armadillo и Matlab

Я пытался сравнить скорости матрицы Matlab Exponential с Armadillo C++ Matrix Exponential. Мне всегда говорили, что если вы хотите самый быстрый код, используйте 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,..., которое можно назвать крон (A, крон (B, крон (C,...))) как в броненосце, так и в матлабе.

Я использовал функцию expmat в Armadillo v7.300.1 и 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

Является ли матричная экспонента Матлаба просто намного быстрее экспоненциальной матрицы Армадилло, или я делаю что-то не так? Кроме того, что является самым быстрым вычислительным ресурсом для матричных экспонент?

0 ответов

Другие вопросы по тегам