看板 Python 關於我們 聯絡資訊
※ 引述《brains (不認識)》之銘言: : 各位好, 現在在x-y平面上面要計算一函數Epsk(x,y), : 但是x,y只能定義在一個特殊的六角形裡面. : A_____B : / \ : F/ \C : \ / : E\_____/D : A=(-2*pi/3, 2*pi/sqrt(3)) : B=( 2*pi/3, 2*pi/sqrt(3)) : C=( 4*pi/3, 0 ) : D=( 2*pi/3,-2*pi/sqrt(3)) : E=(-2*pi/3,-2*pi/sqrt(3)) : F=(-4*pi/3, 0 ) : 若一開始用np.linspace建構x, y向量, 其座標範圍涵蓋這個六角形, : 請問如何用python特殊寫法限制(x,y)在此六角形裡面呢? : 例如一維的情形可用 Z = [a for a in LIST if CONDITION]來構造Z. : 但這裡二維的情況該如何寫呢? : ================================== : #!/usr/bin/python3 : import numpy as np : Lk = 100 : t0 = 1 : t1 = 1 : mu = 0 : x = np.linspace(-4.*np.pi/3.,4.*np.pi/3.,Lk) : y = np.linspace(-2.*np.pi/np.sqrt(3.),2.*np.pi/np.sqrt(3.),Lk) : # 限制x,y於六角形內? : Epsk = - 2.*t1*np.cos(kx/2.) : - 4.*t0*np.cos(kx/2.)*np.cos(ky*np.sqrt(3.)/2.) + mu 網路上確實有很多方法, 但面對目前簡單已知的六角形, 直接定義六個邊界 再進行限制即可. kpx = [] kpy = [] for i in x: for j in y: if ( j<-np.sqrt(3.)*(i-2.*np.pi/3.) + 2.*np.pi/np.sqrt(3.) and j< 2.*np.pi/np.sqrt(3.) and j< np.sqrt(3.)*(i+2.*np.pi/3.) + 2.*np.pi/np.sqrt(3.) and j>-np.sqrt(3.)*(i+2.*np.pi/3.) - 2.*np.pi/np.sqrt(3.) and j>-2.*np.pi/np.sqrt(3.) and j> np.sqrt(3.)*(i-2.*np.pi/3.) - 2.*np.pi/np.sqrt(3.) ): #print(i,j) kpx.append(i) kpy.append(j) kpoints = list(zip(kpx,kpy)) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 132.187.40.182 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1415714464.A.71C.html
pipidog: 取名kpoints,看來是graphene的計算無誤! 11/13 11:28
brains: 不是,是三角格子的BZ. 但graphene的BZ也相同 11/17 07:35