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

问题描述

例如,使用scipyfmin(包含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]))

产生以下输出

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

请记住:

1)scipy您需要将您的函数转换为接受数组的函数(在上面的示例中,我演示了如何执行此操作);

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

解决方法

我有一个函数,我想找到它的最大值和最小值。我的功能是这样的:

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)

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