Làm cách nào để tìm tối đa hàm trong Python? Tôi có thể cố gắng để hack với nhau một chức năng phái sinh và tìm số không của điều đó, nhưng là có một phương pháp trong numpy
(hoặc thư viện khác) mà có thể làm điều đó cho tôi?Tìm mức tối đa của hàm
Trả lời
Bạn có thể sử dụng scipy.optimize.fmin
trên tiêu cực của chức năng của bạn.
def f(x): return -2 * x**2 + 4 * x
max_x = scipy.optimize.fmin(lambda x: -f(x), 0)
# array([ 1.])
Nhưng xin lưu ý rằng bạn thực sự cần chú ý đến các vấn đề phân tích số ở đây. Nó thường là một lá cờ đỏ của lỗi sắp xảy ra khi ai đó nói "làm thế nào một thư viện có thể giải quyết điều này cho tôi?" Hãy chắc chắn rằng * bạn * thực sự hiểu những gì chức năng thư viện đang làm. Đó là sự thật ngay cả khi bạn đã làm công việc số trong một thời gian dài. Gần đây tôi đã gặp phải một [vấn đề tương tự] (http://stackoverflow.com/questions/10038543/tracking-down-the-assumptions-made-by-scipys-ttest-ind-function) với 'scipy.stats'. – ely
Tôi xin lỗi vì câu hỏi không liên quan, nhưng tại sao không có biểu thức lambda? – user1700890
Số không không phải là một phần của 'lambda'. 'Lambda' không thể trả về một' tuple' hoàn toàn bằng cách trả về một chuỗi các giá trị được phân tách bằng dấu phẩy, cách mà một hàm Python thông thường có thể. Trong trường hợp này, dấu phẩy là một phần của danh sách đối số với 'scipy.optimize.fmin', vì vậy toàn bộ đối số đầu tiên là' lambda x: -f (x) 'và đối số thứ hai là' 0'. – ely
Bạn có thể thử SymPy. SymPy có thể cung cấp cho bạn các dẫn xuất tượng trưng, tìm số 0 của nó, v.v.
Nếu chức năng của bạn có thể giải quyết được, hãy thử SymPy một cách phân tích. Tôi sẽ sử dụng ví dụ của EMS ở trên.
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]
Tất nhiên, bạn vẫn sẽ cần phải kiểm tra xem 1 là một công cụ tối đa và không phải là một minimizer của f
In [7]: f.diff(x).diff(x) < 0
Out[7]: True
Tôi nghĩ scipy.optimize.minimize_scalar
và scipy.optimize.minimize
là những cách ưa thích hiện nay, giúp bạn truy cập đến phạm vi kỹ thuật, ví dụ
solution = scipy.optimize.minimize_scalar(lambda x: -f(x), bounds=[0,1], method='bounded')
cho một chức năng biến duy nhất mà phải nằm giữa 0 và 1.
tối đa của một hàm với các tham số.
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. Tìm giá trị tối thiểu và tối đa của hàm
- 2. Cửa sổ tối đa ở mức tối đa
- 3. Cách tìm tối đa avg
- 4. Mức đệ quy tối đa trong Python
- 5. Cách tìm Ngày Tối đa
- 6. Tìm số tối thiểu và tối đa trong trăn
- 7. Android: cách phát nhạc ở mức tối đa có thể?
- 8. Giảm mức sử dụng bộ nhớ tối đa với @autoreleasepool
- 9. Mức độ kế thừa tối đa trong java là gì?
- 10. tìm giá trị tối đa của đối tượng con
- 11. Cách tốt nhất để tìm tối đa và tối thiểu của hai giá trị
- 12. Tìm tối đa, tối thiểu và trung bình trong F #
- 13. Vim - xóa tối đa chuỗi tìm kiếm
- 14. Tìm đa giác diện tích tối đa được ghi trong đa giác lớn hơn
- 15. Tối thiểu ở mức tối đa theo định dạng (hàng, cột)
- 16. Sửa đổi mức thu phóng tối đa của Google Map Type
- 17. Các dòng tối đa và tối đa
- 18. TextRecognize của Mathematica không tối đa
- 19. Số đối số tối đa trong hàm Python là gì?
- 20. Làm cách nào để tìm tất cả các đỉnh trong biểu đồ có mức độ tối đa?
- 21. Độ dài tối đa của một openID
- 22. Điều gì sẽ xảy ra khi kết nối Npgsql đạt đến mức tối đa
- 23. Trả về phút/tối đa của đa chiều trong Python?
- 24. Thuật toán để làm phẳng mức sử dụng tối đa theo thời gian?
- 25. Kích thước tối đa của SharedPreferences lớp
- 26. Chức năng tối đa của Python?
- 27. Kích thước tối đa của phiên PHP
- 28. Độ dài tối đa của SQL CE
- 29. Giá trị tối đa của maxRequestLength?
- 30. Khả năng tối đa của MySQL
Nhìn vào tìm kiếm phần vàng. http://en.wikipedia.org/wiki/Golden_section_search – wberry
@EMS thường là những gì tôi làm, nhưng tôi không phải lúc nào cũng trên SO. Bạn phải cung cấp cho mọi người một thời gian: P –
Xin lỗi, tôi không có ý nói âm thanh bất ổn. Rất nhiều người không được chấp nhận, vì vậy tôi thường viết một lời nhắc nhở như ~ 1 ngày sau, trước khi tôi quên rằng tôi thậm chí còn trả lời câu hỏi cụ thể đó. – ely