2017-11-22 15 views
1

こんにちはインターネット上の人!Hcatとvcatが間違った型を返す

私はプログラミングのほぼ新人です。私は小さな量子物理シミュレーションにジュリアを使用しています。基本的に私は行列を作成し、それらを対角化するためにJuliaを使います。昨日まで、私は "JuliaPro"を使っていましたが、うまくいきましたが、いくつかのことが気になっていましたので、Atom Editorと最新の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

私はパッケージの一部の再インストールをしたとしてアナコンダに切り替えhttps://github.com/JuliaPy/PyPlot.jl/issues/313

今実際の問題が発生しました。私は、hcat()とvcat()を使って、より小さい2次元配列から大きな行列を構築する関数を持っています。この関数は次のようになります(と console output

基本的に、私は唯一の配列を連結、何とか私の結果はこれが起こっていません...スパース行列となる:

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 

は出力として、私は取得しますまったく同じコード)を再インストールする必要があります。誰かがここで何が起こっているか教えてもらえますか?

答えて

1

私は自分で解決しましたが、正確な問題は実際には分かりません。しかし、それは私の出力に表示される "Diagonal"タイプと関係がある。 Diagonal()の代わりにdiagm()を使用すると、エラーは発生しません。

+2

'Diagonal([1,2,3])'は 'diagm([1,2,3])'とは異なる出力タイプです。また、前者はコンストラクタであり、後者は関数であることにも注意してください。タイプ、そしてより一般的には、複数のディスパッチがジュリア言語の核心です。コメントは本当に深いところでこれに入る場所ではありませんので、私は不自然になり、公式文書を慎重に読んでください。これにはかなりの時間がかかりますが、他のいくつかの、満足度の低いプログラミング言語から来ているので、私はそれが価値があると約束します。 –

+0

私は公式の文書で少し読んでみましたが、わからない言葉の説明をしばしば見逃しているので、彼らはほとんど教育的ではありません。 Juliaのためにお勧めできる追加情報はありますか? – Banana

+1

私は公式の文書が驚くほど良いとわかりましたが、Matlab、Python、R、.NETなどの背景から来ていました。プログラミングの初心者であれば、できる限り最善のことはJuliaで作業を続けることです。いつでも何かが分からない場合は、ドキュメントをチェックし、スタックのオーバーフローをチェックしてください。まだ十分なリソースが見つからない場合ここまたは[ジュリア談話のページ](https://discourse.julialang.org/)で尋ねてください。 「最初のステップ」タグがあることに注意してください。これを1年間行い、最後にここに質問に答えます:-p –

関連する問題