Scipy的哪种算法最小化

时间:2017-10-29 12:16:23

标签: python scipy minimize

我试图使用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()

0 个答案:

没有答案