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));
测试过这段代码,对反厄米矩阵取矩阵指数进行酉变换,效果很好。
我正在使用 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));
测试过这段代码,对反厄米矩阵取矩阵指数进行酉变换,效果很好。