Это потому, что x_
представляет собой список списков:
>>> x_
[[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]]
Таким образом, замените строку x_=[c_,d_]
на:
>>> x_ = c_ + d_
Вам также придется изменить свойhamiltonian
для 1xN
или Nx1
списка / массива.
Самое простое, что я могу придумать:
def hamiltonian(x_):
N=len(c_)
if type(x_[0]) == np.array:
x_ = np.concatenate((x_[0:N], x_[N:]), axis=0)
return np.sum([(1/n**3.0)*(n-i)*i*(x_[0][(n-i)]*x_[0][i]+x_[1][(n-i)]*x_[1][i])-(1/n**3.0/alpha**2.0)*np.sum([x_[0][(n-i-j)]*x_[0][i]*x_[1][j] for j in range(0,(n-i+1))]) for n in range(1,N) for i in range(0,(n+1))])