float を返す量子シミュレーション クラスQuTIPを使用して関数を作成しました。次に、関数で scipy.optimize.fmin_cg を呼び出しました。エラーが発生し続けます:
AttributeError: 'numpy.ndarray' object has no attribute 'expm'
行で:
U_sq = H_sq.expm
しかし、H_sq は ndarray ではなく、Qobj のインスタンスです。関数を 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,));