2012-03-08 68 views
1

我熟悉一些在scipy.optimize.optimize的功能,在過去使用fmin_cg,以儘量減少在那裏我知道衍生物的功能。但是,我現在有一個不容易區分的公式。Python函數最小化不帶導

幾個在該模塊中(fmin_cg,例如)的功能並不會真正所需要的衍生物被提供。我假設他們然後通過依次爲每個參數添加一個小值來計算quazi-derivative - 這是否正確?

我的主要問題是這樣的:其中的功能(或一個從別處)是最好的,沒有給出衍生物最小化在多個參數的函數時使用?

+0

你即將正確數值上近似導數(雅可比行列式)的方法。我在使用'scipy.optimize.leastsq'時看到了這個。 – wim 2012-03-08 05:51:47

+0

只是好奇,你有多少變數? – denis 2012-03-14 10:48:25

回答

3

是,在調用任何fmin_bfgs fmin_cg fmin_powell作爲

fmin_xx(func, x0, fprime=None, epsilon=.001 ...) 

估計在x(func(x + epsilon I) - func(x))/epsilon梯度。
這是爲你的應用程序的「最佳」,不過, 強就如何順利的功能,以及有多少變數取決於。
平原內爾德 - 米德,fmin,是一個很好的第一選擇 - 緩慢但肯定; 可惜SciPy的內爾德-米德無論x的規模的開始與一個固定大小的單工,0.05/0.00025。

聽說fmin_tncscipy.optimize.tnc好:

fmin_tnc(func, x0, approx_grad=True, epsilon=.001 ...) or 
fmin_tnc(func_and_grad, x0 ...) # func, your own estimated gradient 

(fmin_tnc是〜fmin_ncg與約束的限制,很好的消息,看看發生了什麼,有些不同ARGS)

3

我並不太熟悉SciPy中可用的方法,但Downhill Simplex方法(又名Nelder-Mead或Amoeba方法)經常適用於多維優化。

現在看看,它看起來像是在minimize()函數中使用method='Nelder-Mead'參數作爲選項提供。

不要單純形(丹)算法的線性規劃混淆...

+0

另外,如[fmin](http://docs.scipy.org/doc/scipy-0.10.1/reference/generated/scipy.optimize.fmin.html#scipy.optimize.fmin)函數 – 2012-03-11 11:17:51