¿Cómo puedo encontrar el máximo de una función en Python? Podría intentar hackear juntos una función derivada y encontrar el cero de eso, pero ¿hay algún método en numpy
(u otra biblioteca) que pueda hacerlo por mí?Encontrar el máximo de una función
Respuesta
Puede usar scipy.optimize.fmin
en el negativo de su función.
def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
Pero tenga en cuenta que realmente necesita prestar atención a los problemas de análisis numérico aquí. A menudo es una señal de alerta de error inminente cuando alguien dice "¿cómo puede una biblioteca resolver esto por mí?" Asegúrese de que * usted * realmente comprenda qué está haciendo la función de la biblioteca. Eso es cierto incluso si has estado haciendo un trabajo numérico durante mucho tiempo. Recientemente sufrí un [problema similar] (http://stackoverflow.com/questions/10038543/tracking-down-the-assumptions-made-by-scipys-ttest-ind-function) con 'scipy.stats'. – ely
Lo siento por una pregunta sin relación, pero ¿por qué hay cero en la expresión lambda? – user1700890
El cero no es parte de la 'lambda'. Un 'lambda' no puede devolver implícitamente una' tupla' devolviendo una secuencia de valores separados por comas, como lo hace una función regular de Python. En este caso, la coma es parte de la lista de argumentos para 'scipy.optimize.fmin', por lo que el primer argumento completo es' lambda x: -f (x) 'y el segundo argumento completo es' 0'. – ely
Usted podría intentar SymPy. SymPy podría proporcionarle la derivada de forma simbólica, encontrar sus ceros, etc.
Si su función se puede solucionar analíticamente, intente SymPy. Usaré el ejemplo de EMS arriba.
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]
Por supuesto, usted todavía tiene que comprobar que 1 es un maximizador y no un minimizador de f
In [7]: f.diff(x).diff(x) < 0
Out[7]: True
Creo scipy.optimize.minimize_scalar
y scipy.optimize.minimize
son las formas preferidas ahora, que le dará acceso al rango de técnicas, por ejemplo
solution = scipy.optimize.minimize_scalar(lambda x: -f(x), bounds=[0,1], method='bounded')
para una sola función variable que debe estar entre 0 y 1.
máximo de una función con parámetros.
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. Encontrar el máximo de Groupwise en Doctrine
- 2. Función C++ para encontrar el valor máximo en una matriz de dobles?
- 3. ¿Cómo encontrar el árbol de expansión máximo?
- 4. Encontrar el máximo local en C
- 5. Encontrar el mínimo y máximo en python
- 6. Encontrar el valor máximo en una columna con GQL
- 7. Python- encontrar el elemento con eventos máximo en una lista
- 8. Encontrar el valor numérico máximo en NSArray
- 9. Encontrar el segundo salario máximo usando linq
- 10. Encontrar el valor máximo en la columna de la tabla
- 11. Encontrar la posición del elemento máximo
- 12. Parámetros de función número máximo
- 13. Encontrar el máximo de una lista de listas por suma de elementos en Python
- 14. manera Plantilla de encontrar el máximo valor permisible
- 15. encontrar el valor máximo de un objeto secundario
- 16. Regex: ¿cómo encontrar el valor entero máximo de un patrón?
- 17. Encontrar programáticamente el tamaño máximo de matriz estática en C++
- 18. Encontrar el ancho máximo medio de un pico
- 19. ¿Cómo puedo encontrar el tamaño máximo de pila?
- 20. Cómo encontrar el valor máximo del conjunto de variables
- 21. ¿Cómo puedo encontrar el máximo o el mínimo de una matriz multidimensional en MATLAB?
- 22. C++ Ayuda para encontrar el valor máximo en un mapa
- 23. Encontrar el nombre de la variable pasa a una función
- 24. Encontrar el valor máximo de un atributo en una matriz de objetos
- 25. Shell script: encontrar el valor máximo de una secuencia de números enteros sin clasificar
- 26. cómo encontrar el máximo en una columna de datos de fecha y hora?
- 27. ¿Cómo encontrar el registro en una tabla que contiene el valor máximo?
- 28. ¿Cómo encontrar el valor máximo para cada clave en una lista de diccionarios utilizando LINQ?
- 29. ¿Cómo encontrar el máximo/mínimo de una matriz anidada en javascript?
- 30. ¿Cómo puedo encontrar el índice del valor máximo en una columna de matriz en MATLAB?
Busque en la sección de búsqueda dorada. http://en.wikipedia.org/wiki/Golden_section_search – wberry
@EMS eso es generalmente lo que hago, pero no siempre estoy así. Tienes que darle tiempo a la gente: P –
Lo siento, no quise sonar perspicaz. Muchas cosas no son aceptadas, así que generalmente escribo un recordatorio como ~ 1 día más tarde, antes de olvidar que incluso respondí esa pregunta específica. – ely