Hcat和vcat返回错误的类型

时间:2017-11-22 07:30:05

标签: types julia

互联网上的人们好!

我几乎完全是编程新手,我使用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

基本上,我只连接数组,但不知怎的,我的结果变成了稀疏矩阵......在重新安装之前,这没有发生(使用完全相同的代码)。有人能告诉我这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

所以..我自己解决了,但我真的不知道确切的问题。但是,它与我的输出中显示的“对角线”类型有关。使用diagm()而不是Diagonal(),错误不会出现。