查找函数的最小值和最大值

pce*_*con 7 python function max min

我有一个功能,我想找到它的最大值和最小值.我的功能是:

def function(x, y):
    exp = (math.pow(x, 2) + math.pow(y, 2)) * -1
    return math.exp(exp) * math.cos(x * y) * math.sin(x * y)
Run Code Online (Sandbox Code Playgroud)

我有一个x [-1,1]和y [-1,1]的间隔.我想找到一种限制在这个间隔内的方法来发现这个函数的最大值和最小值.

Ema*_*zzi 11

例如,使用scipy's fmin(包含Nelder-Mead算法的实现),你可以试试这个:

import numpy as np
from scipy.optimize import fmin
import math

def f(x):
    exp = (math.pow(x[0], 2) + math.pow(x[1], 2)) * -1
    return math.exp(exp) * math.cos(x[0] * x[1]) * math.sin(x[0] * x[1])

fmin(f,np.array([0,0]))
Run Code Online (Sandbox Code Playgroud)

产生以下输出:

Optimization terminated successfully.
     Current function value: -0.161198
     Iterations: 60
     Function evaluations: 113 
array([ 0.62665701, -0.62663095])
Run Code Online (Sandbox Code Playgroud)

请记住:

1)scipy你需要将你的函数转换成一个接受数组的函数(我在上面的例子中展示了如何做到这一点);

2)fmin像大多数对一样使用迭代算法,因此你必须提供一个起点(在我的例子中,我提供(0,0)).您可以提供不同的起点以获得不同的最小值/最大值.

  • 您可以使用支持变量边界的方法,例如 `fmin_tnc`(它的用法如下:`fmin_tnc(f,np.array([0.5,-0.5]), approx_grad=True, bounds=[(-1,1 ),(-1,1)])`)。 (3认同)