Pythonで書いた数式を次のように適用する必要があります。
for s in range(tdim):
sum1 = 0.0
for i in range(dim):
for j in range(dim):
sum1+=0.5*np.cos(theta[s]*(i-j))*
eig1[i]*eig1[j]+eig2[i]+eig2[j])-0.5*np.sin(theta[s]*(i-j))*eig1[j]*eig2[i]-eig1[i]*eig2[j])
PHi2.append(sum1)
さて、これは正しいですが、明らかに非効率的です。逆に、次のようにします。
for i in range(dim):
for j in range(dim):
PHi2 = 0.5*np.cos(theta*(i-j))*(eig1[i]*eig1[j]+eig2[i]+eig2[j])-0.5*np.sin(theta*(i-j))*(eig1[j]*eig2[i]-eig1[i]*eig2[j])
ただし、2 番目の例では、PHi2 のすべての要素で同じ数が得られるため、これは高速ですが、答えは間違っています。どうすればこれをより正確かつ効率的に行うことができますか?
注: eig1 と eig2 は同じ次元 d であり、theta と PHi2 は同じ次元 D ですが、d!=D です。