Sử dụng, ví dụ, scipy
's fmin
(trong đó có một thực hiện các thuật toán Nelder-Mead), bạn có thể thử này:
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]))
trong đó sản lượng đầu ra sau đây:
Optimization terminated successfully.
Current function value: -0.161198
Iterations: 60
Function evaluations: 113
array([ 0.62665701, -0.62663095])
Hãy nhớ rằng:
1) với scipy
bạn cần phải chuyển đổi hàm của bạn thành một hàm chấp nhận một mảng (tôi đã chỉ ra cách thực hiện nó trong ví dụ trên);
2) fmin
sử dụng, giống như hầu hết các cặp của nó, một thuật toán lặp, do đó bạn phải cung cấp điểm bắt đầu (trong ví dụ của tôi, tôi cung cấp (0,0)
). Bạn có thể cung cấp các điểm bắt đầu khác nhau để có được minima/maxima khác nhau.
Nguồn
2013-09-23 18:27:40
Bạn có thực sự giới hạn đối với chức năng này không? Hay bạn muốn có thể làm điều này cho một chức năng tùy ý? Nếu nó chỉ là chức năng này, thì bạn có thể tìm thấy extrema tương đối bằng cách phân biệt. – mgilson
Bạn có thể nên xem tại đây: http://docs.scipy.org/doc/scipy/reference/optimize.html –
Bạn có muốn ước tính gần đúng hoặc điểm nổi chính xác tối đa không? – Shashank