我正在尝试计算矩阵M的矩阵指数,使得M = 1i*(pi/2)*Spin_Sx
,其中Spin_Sx
是具有实数值的矩阵。我收到以下错误:
Matrix::expm(M)
Error in expm(Matrix(x)) :
error in evaluating the argument 'x' in selecting a method for function'expm': Error in all0(object[lower.tri(object)]) :
Argument must be numeric-like atomic vector
Spin_Sx <- structure(c(0, 1.22474487139159, 0, 0, 0, 0, 0, 1.22474487139159,
0, 1.58113883008419, 0, 0, 0, 0, 0, 1.58113883008419, 0, 1.73205080756888,
0, 0, 0, 0, 0, 1.73205080756888, 0, 1.73205080756888, 0, 0, 0,
0, 0, 1.73205080756888, 0, 1.58113883008419, 0, 0, 0, 0, 0, 1.58113883008419,
0, 1.22474487139159, 0, 0, 0, 0, 0, 1.22474487139159, 0), .Dim = c(7L,
7L))
答案 0 :(得分:0)
我在朋友的帮助下想出了一个解决方案。由于Spin_Sx
是对称矩阵(实数或复数),因此它可以对角化为:Spin_Sx = UDU',其中U是酉矩阵,D是对角矩阵,UU'= I.因此,exp (Spin_Sx)= U exp(D)U'。由于D是对角矩阵,exp(D)只是D的对角元素的元素指数。
> A <- 1i*(pi/2)*Spin_Sx
> eig_Values <- eigen(A)$values
> Diagonal_A <- diag(exp(eig_Values))
> eig_Vector <- eigen(A)$vector
> expm_A <- eig_Vector %*% Diagonal_A %*% t(Conj(eig_Vector))