不带导数的Python函数最小化

不带导数的Python函数最小化,python,scipy,derivative,minimization,Python,Scipy,Derivative,Minimization,我熟悉scipy.optimize.optimize中的一些函数,过去曾使用fmin_cg最小化我知道导数的函数。然而,我现在有了一个不容易区分的公式 该模块中的一些功能(例如,fmin_cg)实际上不需要提供衍生产品。我假设他们通过依次给每个参数加上一个小值来计算一个quazi导数,对吗 我的主要问题是:当在没有给定导数的情况下最小化多个参数上的函数时,哪一个函数(或来自其他地方的函数)最适合使用?我不太熟悉SciPy中的可用内容,但该方法(又名Nelder-Mead或Amoeba方法)通常适

我熟悉scipy.optimize.optimize中的一些函数,过去曾使用fmin_cg最小化我知道导数的函数。然而,我现在有了一个不容易区分的公式

该模块中的一些功能(例如,fmin_cg)实际上不需要提供衍生产品。我假设他们通过依次给每个参数加上一个小值来计算一个quazi导数,对吗


我的主要问题是:当在没有给定导数的情况下最小化多个参数上的函数时,哪一个函数(或来自其他地方的函数)最适合使用?

我不太熟悉SciPy中的可用内容,但该方法(又名Nelder-Mead或Amoeba方法)通常适用于多维优化

现在看一下,它似乎可以作为
minimize()
函数中的一个选项,使用
method='Nelder-Mead'
参数


不要将其与线性规划的单纯形(Dantzig)算法混淆…

我不太熟悉SciPy中的可用内容,但该方法(又名Nelder-Mead或Amoeba方法)通常适用于多维优化

现在看一下,它似乎可以作为
minimize()
函数中的一个选项,使用
method='Nelder-Mead'
参数


不要将其与线性规划的单纯形(Dantzig)算法混淆…

是的,将任何
fmin\u bfgs fmin\u cg fmin\u powell
称为

fmin_xx( func, x0, fprime=None, epsilon=.001 ... )
通过
(func(x+epsilon I)-func(x))/epsilon

但是,哪一个对您的应用程序“最好”, 很大程度上取决于函数的平滑程度以及变量的数量。
普通内尔德蜂蜜酒,
fmin
,是一个不错的首选——缓慢但可靠; 不幸的是,scipy Nelder Mead从一个固定大小的单纯形开始.05/.00025,而不管x的比例

我听说
fmin\u tnc
in
scipy.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,带有绑定约束,很好的消息来查看发生了什么,参数有些不同。)

是的,将任何
fmin_bfgs fmin_cg fmin_powell
称为

fmin_xx( func, x0, fprime=None, epsilon=.001 ... )
通过
(func(x+epsilon I)-func(x))/epsilon

但是,哪一个对您的应用程序“最好”, 很大程度上取决于函数的平滑程度以及变量的数量。
普通内尔德蜂蜜酒,
fmin
,是一个不错的首选——缓慢但可靠; 不幸的是,scipy Nelder Mead从一个固定大小的单纯形开始.05/.00025,而不管x的比例

我听说
fmin\u tnc
in
scipy.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,有界约束,看到发生了什么的好消息,有点不同的参数。)

关于数值逼近导数(雅可比)的方法,您是正确的。我在使用
scipy.optimize.leastsq
时看到了这一点。只是好奇,你有多少变量?你对数值逼近导数(雅可比)的方法是正确的。我在使用
scipy.optimize.leastsq
时看到了这一点。只是好奇,你有多少变量?还有,作为函数,作为函数