utilizzando, ad esempio, scipy
s' fmin
(che contiene un'implementazione dell'algoritmo Nelder-Mead), si può provare questo:
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]))
che produce il seguente output:
Optimization terminated successfully.
Current function value: -0.161198
Iterations: 60
Function evaluations: 113
array([ 0.62665701, -0.62663095])
Si prega di tenere presente che:
1) con scipy
è necessario convertire la funzione in una funzione accettando un array (ho mostrato come farlo nell'esempio sopra);
2) fmin
utilizza, come la maggior parte delle sue coppie, un algoritmo iterativo, pertanto è necessario fornire un punto di partenza (nel mio esempio, ho fornito (0,0)
). È possibile fornire diversi punti di partenza per ottenere minimi/massimi diversi.
fonte
2013-09-23 18:27:40
Sei veramente limitato a questa funzione? O vuoi essere in grado di farlo per una funzione arbitraria? Se è solo questa funzione, puoi trovare gli estremi relativi differenziando. – mgilson
Probabilmente dovresti dare un'occhiata qui: http://docs.scipy.org/doc/scipy/reference/optimize.html –
Vuoi preventivi ravvicinati o il massimo virgola mobile esatto? – Shashank