问题的原因不是 Julia,而是 LAPACK。这些是最终在您的问题中发生的对 LAPACK 的调用:
julia> A = Symmetric(ham_dense);
julia> LAPACK.syevr!('N', 'A', A.uplo, A.data, 0.0, 0.0, 0, 0, -1.0)
([-0.00316231, -3.16228e-8, -3.16228e-13, -3.16228e-18, -3.16228e-23, -3.16228e-28, -3.16228e-33, -3.16228e-38, -3.16228e-43, -3.16228e-48 … 3.16228e-48, 3.16228e-43, 3.16228e-38, 3.16228e-33, 3.16228e-28, 3.16228e-23, 3.16228e-18, 3.16228e-13, 3.16228e-8, 0.00316231], Array{Float64}(26,0))
julia> LAPACK.syevr!('V', 'A', A.uplo, A.data, 0.0, 0.0, 0, 0, -1.0)
([-0.00316231, -3.16228e-8, -3.16226e-13, -2.01616e-18, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 … 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.33528e-18, 3.1623e-13, 3.16228e-8, 0.00316231], [0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0; … ; 0.0 0.0 … 0.0 0.0; 0.0 0.0 … 0.0 0.0])
here 提供了有关所用算法的更多详细信息,显然在您的问题中,'V' 和 'N' 选项之间的差异很重要。最可能的原因是矩阵中最大和最小绝对非零值的相对差异为3.1622799999999996e57,因此可能会出现舍入误差。
要获得更准确的结果,您可以尝试 https://github.com/andreasnoack/GenericLinearAlgebra.jl 解决此类问题(它还没有 100% 的覆盖率并且是实验性的;您必须直接从 GitHub 安装它):
julia> using GenericLinearAlgebra
julia> eigvals!(BigFloat.(ham))
26-element Array{Complex{BigFloat},1}:
3.162311622436982597307210858940985344637820907597401918790008106376535395523792e-03 + 0.0im
-3.162311622436982597307210858940985344637820907597401918790008106376535395523792e-03 - 0.0im
3.162275320748298914345541008173998213886552122046290838685673282360067640110347e-08 + 0.0im
-3.162275320748298914345541008173998213886552122046290838685673282360067640110347e-08 - 0.0im
3.162279999906412335597731744982886550300231679921373378044484886374018562948466e-13 + 0.0im
-3.162279999906412335597731744982886550300231679921373378044484886374018562948466e-13 - 0.0im
3.162275320432081129857004982100630443653566381027866582713636819787519332736638e-18 + 0.0im
-3.162275320432081129857004982100630443653566381027866582713636819787519332736638e-18 - 0.0im
3.16227999990640833509930880688425213299040187766949574394524744644634876014558e-23 + 0.0im
-3.16227999990640833509930880688425213299040187766949574394524744644634876014558e-23 - 0.0im
3.162275320432081720151694936640991555004802493020434614166313056473370703548901e-28 + 0.0im
-3.162275320432081720151694936640991555004802493020434614166313056473370703548901e-28 - 0.0im
3.162279999906408618697844989393166731890284189322183903857450691187082378309407e-33 + 0.0im
-3.162279999906408618697844989393166731890284189322183903857450691187082378309407e-33 - 0.0im
3.162275320432081242789139430274227532672254451244152725835934892025795336479976e-38 + 0.0im
-3.162275320432081242789139430274227532672254451244152725835934892025795336479976e-38 - 0.0im
3.162279999906408121819532864964337223950046982981611768712594199335770669717062e-43 + 0.0im
-3.162279999906408121819532864964337223950046982981611768712594199335770669717062e-43 - 0.0im
3.162275320432081589442009096101640817970407333051878158079593749435340884536119e-48 + 0.0im
-3.162275320432081589442009096101640817970407333051878158079593749435340884536119e-48 - 0.0im
3.16227999990640827051609368034343266099945811896062048249442816603909306889103e-53 + 0.0im
-3.16227999990640827051609368034343266099945811896062048249442816603909306889103e-53 - 0.0im
3.162275320432081506938731037100931333563539294943227057058654130546144762012267e-58 + 0.0im
-3.162275320432081506938731037100931333563539294943227057058654130546144762012267e-58 - 0.0im
3.162248377469425472537552742972431066440507090082172984570144491979906956991795e-63 + 0.0im
-3.162248377469425472537552742972431066440507090082172984570144491979906956991795e-63 - 0.0im
对于Float64,它接近于eigvals。