2012-03-08 67 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