我使用返回浮点数的量子模拟类QuTIP编写了一个函数。接下来,我在函数上调用了 scipy.optimize.fmin_cg。我不断收到错误:
AttributeError: 'numpy.ndarray' object has no attribute 'expm'
在线上:
U_sq = H_sq.expm
但是 H_sq 是 Qobj 的一个实例,而不是一个 ndarray。如果我在 scipy.optimize.fmin_cg 之外运行该函数,它会将类型返回为“实例”;当它在 fmin_cg 内运行时,它返回类型为“ndarray”。
为什么这样做?python中是否有一个优化函数会尊重使用这样的实例?
这是代码:
from qutip import *
from numpy import *
import scipy.optimize
def sq_fidelity(eps,N=7):
H_sq = squeez(N,eps);
print type(H_sq);
one_ph = basis(N,1);
U_sq = H_sq.expm();
squ = U_sq*one_ph;
fidelity = expect(fock_dm(N,1),squ);
return float(fidelity)
if __name__=='__main__':
print sq_fidelity(0.2);
eps = scipy.optimize.fmin_cg(sq_fidelity, x0=0.2, args=(7,));