我试图使用scipy.optimize.minimize函数进行非常简单的测试。目前,一个简单的余弦函数与正或负标量有关。当然,结果应为0(如果标量为负)或Pi(如果标量为正)。 根据我选择的算法,结果是正确的(正如预期的那样是O或Pi)。
我不理解我的错误。
感谢您的帮助。
她是我的代码。
#!/usr/bin/env python
# -*- coding: utf8 -*-
from __future__ import division
from numpy import linspace, append, zeros, sin, cos, arctan2
from scipy.optimize import minimize
import matplotlib.pyplot as plt
##### PARAMETERS #####
EZ = 8.9e-3
EK = 3.3e-5
Bmax = 5.0
Nb = 1001
ph=0.0
old=ph
##### MINIMIZATION ALGORITHM #####
algo='Nelder-Mead'
#algo='Powell'
#algo='CG'
#algo='BFGS'
#algo='Newton-CG'
#algo='L-BFGS-B'
#algo='TNC'
#algo='COBYLA'
#algo='SLSQP'
#algo='dogleg'
#algo='trust-ncg'
# Energy
def F(x,b):
ez = -EZ*b*cos(x-ph)
return ez
def Fx(x,b):
return EZ*b*sin(x-ph)
def Minimisation(x,b):
result=minimize(F, x, jac=Fx , args=(b,), method=algo)
return result.x
##### SIMULATIONS #####
list_B=linspace(Bmax,-Bmax,Nb)
p1=zeros(2*Nb)
M1=zeros(2*Nb)
B=append(list_B,-list_B)
id=0
for bb in B :
new=Minimisation(old, bb)
old = new
p1[id]=new
id=id+1
M1 = cos(p1-ph)
##### PLOT RESULTS #####
plt.plot(B,M1,'b')
plt.grid('on')
plt.show()