Armadillo 库的复杂矩阵指数

Complex matrix exponential with Armadillo library

我正在使用 Armadillo 在 C++ 中进行一些物理模拟。我需要计算如下所示的产品:

Q = R * exp(neg_i*Lambda*t) * R.t() * Q

其中 Q,R 是 cx_mat class 大小相同,Lambda 是与 Q,R 大小相同的垫子 class 并且是对角线,neg_i 是 -i 复数,t 是双精度数。我应该得到一个酉矩阵作为解决方案,但我得到的是非酉矩阵。我想知道指数函数是否适用于复杂矩阵?或者如果不是我应该用什么来代替它?

您需要使用 expmat() function for a matrix exponential, exp() 计算元素指数。

例如,我目前用于物理模拟的一些代码:

arma::cx_mat f;  // A hermitian matrix
double delta_t ;  // A time step
std::complex<double> i_imag(0.0,1.0) ;  // i, the imaginary number

std::vector<arma::cx_mat> U; // A vector of complex unitary matrices.

U.push_back(arma::expmat(-i_imag * delta_t * f));

测试过这段代码,对反厄米矩阵取矩阵指数进行酉变换,效果很好。