Jak znaleźć maksimum funkcji w Pythonie? Mógłbym spróbować zhakować pochodną funkcję i znaleźć zero tego, ale czy istnieje metoda w numpy
(lub innej bibliotece), która może to zrobić dla mnie?Wyszukiwanie maksimum funkcji
Odpowiedz
Możesz użyć scipy.optimize.fmin
na minusie swojej funkcji.
def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
Należy jednak pamiętać, że naprawdę należy zwrócić uwagę na problemy z analizą numeryczną. Często jest to czerwona flaga zbliżającego się błędu, gdy ktoś mówi: "w jaki sposób biblioteka może rozwiązać to dla mnie?" Upewnij się, że * ty * naprawdę rozumiesz, co robi funkcja biblioteki. To prawda, nawet jeśli wykonywałeś pracę numeryczną przez długi czas. Niedawno miałem [podobny problem] (http://stackoverflow.com/questions/10038543/tracking-down-theassassions-made-by-scipys-ttest-ind-function) z 'scipy.stats'. – ely
Przykro mi z powodu niepowiązanego pytania, ale dlaczego w wyrażeniu lambda występuje zero? – user1700890
Zero nie jest częścią 'lambda'. 'Lambda' nie może niejawnie zwrócić' krotki', zwracając rozdzielaną przecinkami sekwencję wartości, tak jak zwykła funkcja Pythona. W tym przypadku przecinek jest częścią listy argumentów dla 'scipy.optimize.fmin', więc cały pierwszy argument to' lambda x: -f (x) ', a cały drugi argument to' 0'. – ely
Możesz spróbować SymPy. SymPy może być w stanie dostarczyć pochodną symbolicznie, znaleźć jej zera i tak dalej.
Jeśli twoja funkcja jest możliwa do rozwiązania analitycznie spróbuj SymPy. Użyję powyższego przykładu EMS.
In [1]: from sympy import *
In [2]: x = Symbol('x', real=True)
In [3]: f = -2 * x**2 + 4*x
In [4]: fprime = f.diff(x)
In [5]: fprime
Out[5]: -4*x + 4
In [6]: solve(fprime, x) # solve fprime = 0 with respect to x
Out[6]: [1]
Oczywiście, będzie trzeba jeszcze sprawdzić, czy 1 jest maximizer a nie Minimizer f
In [7]: f.diff(x).diff(x) < 0
Out[7]: True
myślę scipy.optimize.minimize_scalar
i scipy.optimize.minimize
są preferowane sposoby teraz, że daje dostęp do zakresu technik, np
solution = scipy.optimize.minimize_scalar(lambda x: -f(x), bounds=[0,1], method='bounded')
dla jednej zmiennej funkcji, które muszą mieścić się między 0 i 1.
maksimum funkcji z parametrów.
import scipy.optimize as opt
def get_function_max(f, *args):
"""
>>> round(get_function_max(lambda x, *a: 3.0-2.0*(x**2)), 2)
3.0
>>> round(get_function_max(lambda x, *a: 3.0-2.0*(x**2)-2.0*x), 2)
3.5
>>> round(get_function_max(lambda x, *a: a[0]-a[1]*(x**2)-a[1]*x, 3.0, 2.0), 2)
3.5
"""
def func(x, *arg):
return -f(x, *arg)
return f(opt.fmin(func, 0, args=args, disp=False)[0], *args)
- 1. Dopasowywanie wielomianu do maksimum funkcji
- 2. Jak znaleźć maksimum i minimum funkcji za pomocą Maxima?
- 3. ActiveRecord: Wybierz maksimum limitu
- 4. Jak znaleźć maksimum avg
- 5. Wyszukiwanie kodu źródłowego dla wbudowanych funkcji Pythona?
- 6. Wyszukiwanie indeksu elementu w funkcji na żywo
- 7. Które maksimum Python wybiera w przypadku remisu?
- 8. Jak uzyskać maksimum dwóch wartości w MySQL?
- 9. Elementarne maksimum dwóch ramek danych Ignoring NaNs
- 10. RuntimeWarning: niepoprawna wartość napotkana w maksimum
- 11. wybierz maksimum, min wartości z dwóch tabel
- 12. jak znaleźć maksimum w datacolumn datetime?
- 13. Mapy Google, ustawianie suwaków minimum i maksimum
- 14. Granice minimum i maksimum Gnuplot dla autoskalowania
- 15. Wyszukiwanie słowa w ciągu znaków za pomocą funkcji php
- 16. Wyszukiwanie za pomocą znacznika za pomocą funkcji Ransack
- 17. efektywny sposób uzyskania maksimum każdego wiersza dla dużej rzadkiej macierzy
- 18. Wyszukiwanie Levenshtein
- 19. Wyszukiwanie topologiczne i pierwsze wyszukiwanie zakresu
- 20. Wyszukiwanie przyrostowe vs Wyszukiwanie w Visual Studio
- 21. Solr wielojęzyczne wyszukiwanie
- 22. Wyszukiwanie Algolia vs Solr
- 23. Wyszukiwanie najmniej obciążonego serwera
- 24. Wyszukiwanie argumentu w C++
- 25. Wyszukiwanie rekursywne Mongodb
- 26. Drzewo binarne Pierwsze wyszukiwanie
- 27. Wyszukiwanie zapisanego pliku na symulatorze?
- 28. Python znaleźć minimum i maksimum z dwóch list
- 29. Powrót maksimum zera lub wartość dla pandy DataFrame kolumna
- 30. Używanie LINQ do uzyskania maksimum kolumn dla tablic dwuwymiarowych
Sprawdź wyszukiwanie w złotym przekroju. http://en.wikipedia.org/wiki/Golden_section_search – wberry
@EMS to na ogół to, co robię, ale nie zawsze jestem na SO. Musisz dać ludziom trochę czasu: P –
Przepraszam, nie chciałem brzmieć persnickety. Wiele się nie zgadza, więc generalnie piszę notatkę przypominającą około 1 dzień później, zanim zapomnę, że nawet odpowiedziałem na to konkretne pytanie. – ely