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コードのみのソリューションを探しています。