R Matrix :: expm(x),x很复杂

时间:2015-12-25 02:26:59

标签: r matrix

我正在尝试计算矩阵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))

1 个答案:

答案 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))