Re: [問題] 限制定義域的計算和作圖

看板Python作者 (不認識)時間11年前 (2014/11/11 22:01), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

11/13 11:28, , 1F
取名kpoints,看來是graphene的計算無誤!
11/13 11:28, 1F

11/17 07:35, , 2F
不是,是三角格子的BZ. 但graphene的BZ也相同
11/17 07:35, 2F
文章代碼(AID): #1KOXQWSS (Python)
討論串 (同標題文章)
文章代碼(AID): #1KOXQWSS (Python)