互联网上的人们好!
我几乎完全是编程新手,我使用Julia进行小量子物理模拟。基本上我构造矩阵并使用Julia来对齐它们。直到昨天我使用了“JuliaPro”并且它工作正常,但有些事情让我烦恼,所以我卸载了它,下载了Atom编辑器和最新的Julia命令行版本(v0.6.1)。
如果可能相关: 在尝试使用“使用PyPlot”时,我必须先添加包,然后遇到此处描述的错误:https://discourse.julialang.org/t/error-installing-pyplot-the-python-package-mpl-toolkits-mplot3d-could-not-be-found-by-pyimport/6372
我做了一些重新安装包并切换到Anaconda,如下所述:https://github.com/JuliaPy/PyPlot.jl/issues/313
现在到了实际问题。我有一个函数,我使用hcat()和vcat()从较小的2d数组构建一个更大的矩阵。该函数如下所示:
function InfiniteHamil(E, EA, EAB, FA_list, FB_list, d_list, ϵ_list)
#------------------------------
num_steps = 200
x_values = collect(0:1/num_steps:1)
y_values = []
#------------------------------
for x in x_values
k = path(x)
z1 = exp(im*k[1])
z2 = exp(im*k[1]/2)*exp(im*sqrt(3)*k[2]/2)
c1 = cos(k[1])
c2 = cos(k[1]/2 + k[2]*sqrt(3)/2)
c12 = cos(k[1]/2 - k[2]*sqrt(3)/2)
secondHam = vcat( hcat(E+ 2*(c1*d_list[1] + c2*d_list[2]+ c12*d_list[5]),
FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3]),
FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3])),
hcat((FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3]))',
EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5]),
EAB ),
hcat((FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3]))',
EAB',
EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5]) ))
#print types of constituents
println(typeof(E+ 2*(c1*d_list[1] + c2*d_list[2]+ c12*d_list[5])))
println(typeof(FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3])))
println(typeof(FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3])))
println(typeof((FA_list[1]+ conj(z2)*(FA_list[2]+z1*FA_list[3]))'))
println(typeof(EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5])))
println(typeof(EAB ))
println(typeof((FB_list[1]+ conj(z2)*(FB_list[2]+z1*FB_list[3]))'))
println(typeof(EAB' ))
println(typeof(EA+ 2*( c1*ϵ_list[1]+c2*ϵ_list[2]+c12*ϵ_list[5])))
println(typeof(secondHam))
push!(y_values , filter(x -> x > -10, sort(real(eigvals(secondHam))) ))
end
#------------------------------
y_values = hcat(y_values...)
plotData(x_values,y_values)
end
作为输出,我得到: console output
基本上,我只连接数组,但不知怎的,我的结果变成了稀疏矩阵......在重新安装之前,这没有发生(使用完全相同的代码)。有人能告诉我这里发生了什么吗?
答案 0 :(得分:1)
所以..我自己解决了,但我真的不知道确切的问题。但是,它与我的输出中显示的“对角线”类型有关。使用diagm()而不是Diagonal(),错误不会出现。