问题描述
我正在使用 Armadillo 用 C++ 进行一些物理模拟。我需要计算一个看起来像的产品:
Q = R * exp(neg_i*Lambda*t) * R.t() * Q
其中 Q,R 是相同大小的 cx_mat 类,Lambda 是与 Q,R 相同大小的 mat 类,并且是对角线,neg_i 是 -i 复数,t 是双精度数。我应该得到一个酉矩阵作为解决方案,但我得到的是非酉矩阵。我想知道指数函数是否适用于复杂矩阵?或者如果不是我应该用什么替换它?
解决方法
您需要对矩阵指数使用 expmat() 函数,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));
已经测试了这段代码,取反厄米矩阵的矩阵指数来得到酉变换并且工作正常。