stosując, na przykład, scipy
„s fmin
(który zawiera implementację algorytmu Nelder-Mead), można spróbować to:
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]))
co daje następujący wynik:
Optimization terminated successfully.
Current function value: -0.161198
Iterations: 60
Function evaluations: 113
array([ 0.62665701, -0.62663095])
Należy pamiętać, że:
1) z scipy
musisz przekonwertować swoją funkcję na funkcję akceptującą tablicę (pokazałem, jak to zrobić w powyższym przykładzie);
2) fmin
używa, podobnie jak większość swoich par, iteracyjnego algorytmu, dlatego musisz podać punkt początkowy (w moim przykładzie podałem (0,0)
). Możesz podać różne punkty początkowe, aby uzyskać różne minimalne/maksymalne.
Czy naprawdę ogranicza się tylko do tej funkcji? A może chcesz to zrobić dla dowolnej funkcji? Jeśli jest to tylko ta funkcja, możesz znaleźć relatywny ekstrema poprzez różnicowanie. – mgilson
Powinieneś zajrzeć tutaj: http://docs.scipy.org/doc/scipy/reference/optimize.html –
Czy chcesz uzyskać przybliżone prognozy lub maksymalną wartość zmiennoprzecinkową? – Shashank