python中的负面功能

时间:2012-04-08 23:46:11

标签: python mathematical-optimization

我定义了一个函数来计算像x ^ 2这样的函数的最小值。我想定义一个函数,通过乘以负数来计算函数的最大值,计算函数的最大值。

def myf(g):
        return -(g+1.3)**2+5
def maximize(f,low,high,tol):
        return minimize(-1*f,low,high,tol)

有办法做到这一点吗?当我尝试我所拥有的时,我会收到以下错误:

TypeError: unsupported operand type(s) for *: 'int' and 'function'

最小化定义如下:

def minimize(f,low,high, tol):
    if low>high:
        c=low; a=high
        a=float(a); c=float(c);
    else:
        a=float(low); c=float(high);
    b=a+(c-a)*.618033
    fa=f(a); fc=f(c)
    fb=f(b);
    if fb>fa or fb>fc: return maximize(f,low,high,tol)
    while abs(a-c)>tol:
        d=a+(c-b);
        fd=f(d);
        if d<b:
            if fb<fd:
                a=d; fa=fd;
            else:
                c=b; b=d
                fc=fb; fb=fd
        else:           
            if fd<fb:
                a=b; fa=fb; 
                b=d; fb=fd
            else:
                c=d; fc=fd
    return (a+c)/2.

寻找仅限python代码的解决方案。

3 个答案:

答案 0 :(得分:4)

您无法将函数与数字相乘。相反,构造一个使用旧函数的新函数,并将结果(而不是函数本身)乘以数字:

def maximize(f,low,high,tol):
    return minimize(lambda x: -f(x),low,high,tol)

答案 1 :(得分:1)

有几种方法可以做到这一点。最直接的是将你的函数“包装”到另一个函数中。您可以使用lambda:new_f = lambda x: -f(x)。如果您不熟悉lambda,这是

的快捷方式
def new_f(x):
    return -f(x)

答案 2 :(得分:1)