我正在尝试消除矩阵中一些与主对角线相邻的2个对角线为非零的非零项。
import numpy as np
import matplotlib.pyplot as plt
n = 3 #number of atoms in chain
eps =0.000 #onsite energy
t= 1 #hopping
hamiltonian = np.zeros((n**2,n**2)) # store the Hamiltonian
for i in np.arange(0, n**2):
for j in np.arange(0,n**2):
#hamiltonian[i,i] = eps
if(i==j):
hamiltonian[i,j] = eps
if(i>0 and i==j):
hamiltonian[i,j-1] = t
if(i<n**2-1 and i==j):
hamiltonian[i,j+1] = t
if(i==j):
for i in np.arange(0,n**2,n):
hamiltonian[i,j-1] = 0
print(hamiltonian)
我希望它仅消除下部三角形非零条目,但它会擦除上部三角形中的某些条目。我知道这是因为在带有for循环的最后一个if语句上,当我只希望它对第一个参数i进行迭代时,它正在对数组的两个参数进行迭代,但是由于我将i = j设置为对两个都运行。
我要获取的矩阵如下:
PS:对于非常糟糕的问题格式表示抱歉,这是我的第一个问题。
hamiltonian = np.zeros((n**2,n**2)) # store the Hamiltonian
for i in np.arange(0, n**2):
for j in np.arange(0,n**2):
if abs(i-j) == 1:
hamiltonian[i,j] = 1
这是您要寻找的吗?:
hamiltonian[0,1] = 1
hamiltonian[n**2-1,n**2-2] = 1
for i in np.arange(1, n**2-1):
hamiltonian[i,i+1] = 1
hamiltonian[i,i-1] = 1