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

作者: brains (不認識)   2014-11-11 22:01:02
※ 引述《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))
作者: pipidog (如果狗狗飛上天)   2014-11-13 11:28:00
取名kpoints,看來是graphene的計算無誤!
作者: brains (不認識)   2014-11-17 07:35:00
不是,是三角格子的BZ. 但graphene的BZ也相同

Links booklink

Contact Us: admin [ a t ] ucptt.com