如何查找Python中函數的最大值?我可以嘗試將衍生函數一起破解並找到零值,但是在numpy
(或其他庫)中是否有方法可以爲我執行此操作?查找函數的最大值
查找函數的最大值
回答
您可以在函數的負數上使用scipy.optimize.fmin
。
def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
但請注意,您確實需要關注數值分析問題。當某人說「圖書館如何爲我解決這個問題?」時,這往往是即將發生錯誤的紅旗。確保*你真的瞭解庫函數在做什麼。即使你長期從事數值工作也是如此。我最近用'scipy.stats'遭遇了[類似問題](http://stackoverflow.com/questions/10038543/tracking-down-the-assumptions-made-by-scipys-ttest-ind-function)。 – ely 2012-04-13 19:24:30
我很抱歉無關的問題,但爲什麼在lambda表達式中爲零? – user1700890 2016-03-27 03:09:54
零不是'lambda'的一部分。一個'lambda'不能通過返回逗號分隔的值序列來隱式地返回一個'tuple',這是一個常規的Python函數可以使用的方式。在這種情況下,逗號是'scipy.optimize.fmin'參數列表的一部分,因此整個第一個參數是'lambda x:-f(x)',整個第二個參數是'0'。 – ely 2016-03-27 03:14:13
您可以試試SymPy。 SymPy可能能夠爲您提供象徵性的衍生物,找到它的零等等。
如果你的函數是可解析的,請嘗試SymPy。我將使用上面的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]
當然,你仍然需要檢查1是最大化,而不是f的極小
In [7]: f.diff(x).diff(x) < 0
Out[7]: True
我覺得scipy.optimize.minimize_scalar
和scipy.optimize.minimize
現在是首選的方法,供您訪問到技術的範圍,例如
solution = scipy.optimize.minimize_scalar(lambda x: -f(x), bounds=[0,1], method='bounded')
用於必須位於與參數的函數的最大0和1之間
單個可變功能。
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. xslt max函數查找最大值
- 2. 函數查找本地最大值
- 3. 查找函數的最小值和最大值
- 4. 查找插值函數的最小值。
- 5. 查找函數的最大值和平均值
- 6. 函數查找最大數量
- 7. 使用JavaScript函數查找數組中的最大值
- 8. 查找最小值的最大值
- 9. 查找最大的函數是一個最大的功能
- 10. 如何查找數組的最大值?
- 11. 查找數組的最大值
- 12. 查找數組中的最大值
- 13. 查找數組中的最大值
- 14. Java:查找數組中的最大值
- 15. 在數據結構中查找最大值最大值和最大鍵值
- 16. 以特定分辨率查找連續函數的最大值
- 17. 查找某個函數的所有局部最大值
- 18. 使用ODE45查找函數的最大值
- 19. 查找最大值/最小值
- 20. 查找局部最小值/最大值
- 21. C查找最大值和最小值?
- 22. 查找最大值和最小值
- 23. 查找最小值和最大值
- 24. 查找最小值和最大值JAVA
- 25. 查找最大和最大的數字
- 26. 找到最大值和最小值的C++函數
- 27. 查找最大值 - Java
- 28. 查找表列最大值
- 29. 揹包查找最大值
- 30. 如何查找最大值
調查黃金分割搜索。 http://en.wikipedia.org/wiki/Golden_section_search – wberry 2012-04-13 21:31:01
@EMS通常是我所做的,但我並不總是這樣。你得給人一些時間:P – 2012-04-14 04:11:42
對不起,我不是故意要說話。很多都不被接受,所以我通常會在1天后寫下一條提醒筆記,然後我忘記了我甚至回答了具體問題。 – ely 2012-04-14 04:12:53