我试图在真实空间中计算向量 a、b 和 c 的三重叉积,并在整个空间上进行积分。结果是电子系统的哈密顿术语,因此也有带数的索引(您可以将 a 和 b 视为实空间中波函数的梯度,将 c 视为矢量场): 其中和是从 0 到 50 的索引。我可以将三重乘积写为
这应该更快。
所以对于python的第一个术语,我正在做
import numpy as np
N = 50 # band index
v = 3 # direction x,y,z
g = 30000 # real space grid points
a = np.ones((N,v,g), dtype = 'complex')
b = np.ones((N,v,g), dtype = 'complex')
c = np.ones((v,g), dtype = 'complex')
H_vnn = np.zeros((N,v,N), dtype = 'complex')
for i in range(g):
H_vnn += np.array([c[v,i]*(np.dot(a[:,:,i],b[:,:,i].T)) for v in range(3)])
当没有遇到内存错误时,它会永远持续下去。我很确定这不是最有效的方法,但我能想到的唯一选择是循环 g 索引,这似乎更广泛。感谢所有人,特别是那些可以帮助我的人