2

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 です。

4

3 に答える 3

0

コードの最初のビットでは があります0.5*np.cos(theta[s]*(i-j))...が、2 番目のコードでは0.5*np.cos(theta*(i-j)).... コードの 2 番目のビットで theta を別の方法で定義していない限り、これが問題の原因である可能性があります。

于 2014-01-16T23:11:30.103 に答える