如何将运算符转换为矩阵?

问题描述 投票:0回答:1

我正在尝试使用

Quantumoptics.jl
包找到哈密顿量的特征值。但是每次我尝试这样做时,它都会给我一个错误提示
Methoderror: no method matching eigen(::Operator{FockBasis{Int64}, FockBasis{Int64}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}})

a = destroy(cavity);
at = create(cavity);

beta= 0.1;

H= beta * at *a
e = eigen(H);

我期待一个数组给我

H
的特征值。我也试过
H = Matrix(H)
,但没有帮助

matrix julia diagonal
1个回答
0
投票

在 Julia 中,您可以使用

typeof
检查类型,例如,

> typeof(H)
Operator{FockBasis{Int64}, FockBasis{Int64}, SparseArrays.SparseMatrixCSC{ComplexF64, Int64}}

如果你想了解更多关于

Operator
s 的信息,你可以在 REPL 中输入
?Operator
来获取快速文档,查阅包的 在线文档 了解更多细节,或者使用
dump(H)
查看这个的字段结构。

因此,要获得

Operator
的系数,可以使用
H.data
。要将它们检索为(密集的)
Matrix
,您可以使用
dense(H).data
。不过,如果您对特征值感兴趣,我建议您直接使用
eigenstates(H)
,这是 QuantumOptics-package 中的 实现,它可以直接处理
Operator
s 并处理基数,即,

function eigenstates(op::DenseOpType, n::Int=length(basis(op)); warning=true)
   b = basis(op)
   if ishermitian(op)
       D, V = eigen(Hermitian(op.data), 1:n)
       states = [Ket(b, V[:, k]) for k=1:length(D)]
       return D, states
   # ...
   end
 end
 
© www.soinside.com 2019 - 2024. All rights reserved.