2017-11-22 3 views
1

Hallo Leute im Internet!Hcat und vcat geben falsche Typen zurück

Ich bin fast ein Neuling in Programmierung und ich benutze Julia für kleine quantenphysikalische Simulationen. Im Grunde konstruiere ich Matrizen und benutze Julia, um sie zu diagonalisieren. Bis gestern habe ich "JuliaPro" benutzt und es funktionierte gut, aber einige Dinge haben mich geärgert und ich habe es deinstalliert, den Atom Editor und die neueste Julia Kommandozeilenversion (v0.6.1) heruntergeladen.

Im Falle könnte es relevant sein: Beim Versuch, „mit PyPlot“ zu verwenden, ich hatte das Paket zuerst hinzuzufügen und begegnet der Fehler hier beschrieben: https://discourse.julialang.org/t/error-installing-pyplot-the-python-package-mpl-toolkits-mplot3d-could-not-be-found-by-pyimport/6372

ich einige Reinstallation Pakete tat und zu Anaconda geschaltet, wie hier beschrieben: https://github.com/JuliaPy/PyPlot.jl/issues/313

Jetzt zum eigentlichen Problem. Ich habe eine Funktion, wo ich eine größere Matrix aus kleineren 2D-Arrays mit hcat() und vcat() erstellen. Die Funktion sieht wie folgt aus:

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 

Als Ausgabe erhalte ich: console output

Grundsätzlich bin Arrays nur verketten, aber irgendwie wird mein Ergebnis ein Sparse Matrix ... Dies ist nicht geschehen (mit den exakt gleichen Code) vor der Neuinstallation. Kann mir jemand sagen, was hier vor sich geht?

Antwort

1

Also .. Ich habe es selbst gelöst, aber ich kenne das genaue Problem nicht wirklich. Es hat jedoch mit dem Typ "Diagonal" zu tun, der in meiner Ausgabe angezeigt wird. Mit diagm() anstelle von Diagonal() tritt der Fehler nicht auf.

+2

'Diagonal ([1,2,3])' hat einen anderen Ausgabetyp als 'diagm ([1,2,3])'. Beachten Sie auch, dass ersteres ein Konstruktor ist, während letzteres eine Funktion ist. Typen und, allgemeiner, Mehrfachversand sind der Kern der Julia-Sprache. Ein Kommentar ist nicht wirklich der richtige Ort, um dies zu vertiefen, also werde ich lahm und empfehle Ihnen, die offiziellen Dokumente sorgfältig zu lesen. Das wird ziemlich viel Zeit in Anspruch nehmen, aber da ich selbst aus mehreren anderen, weniger befriedigenden Programmiersprachen gekommen bin, verspreche ich, dass es sich lohnt. –

+0

Ich habe versucht, ein wenig in den offiziellen Dokumenten zu lesen, aber ich finde, dass sie kaum lehrreich sind, da sie oft Erklärungen der Begriffe vermissen, die ich nicht kenne. Welche Zusatzinformationen können Sie Julia empfehlen? – Banana

+1

Ich fand die offiziellen Dokumente erstaunlich gut, aber andererseits kam ich aus einem Hintergrund mit Matlab, Python, R und .NET. Wenn Sie ein Neuling in der Programmierung sind, ist das Beste, was Sie tun können, weiter in Julia zu arbeiten, und wenn Sie sich nicht sicher sind, überprüfen Sie die Dokumente, überprüfen Sie den Stapelüberlauf und ob Sie immer noch keine gute Ressource finden , frag es hier oder auf der [julia diskurs page] (https://discourse.juliallang.org/). Beachten Sie, dass es ein "Erste Schritte" -Tag hat. Tun Sie das für ein Jahr, und Sie werden hier am Ende Fragen beantworten :-p –

Verwandte Themen