在matlab中编写目标函数(包括梯度向量)的常用方法如下:
[L,G] = objfun(x)
其中 L
是目标函数的值, G
是梯度向量, x
是我想要优化的系数向量 .
但是,当我包含另一个输入(即 [L,G]=objfun(x,M)
,其中 M
是一个矩阵)或当我在函数 objfun
中调用另一个函数时,代码没有运行 .
如何通过保持这种优化格式来包含任何输入并调用 objfun
中的任何函数?
请注意,我调用优化如下:
[x ,fval] = fminunc(@objfun,x,options)
哪里
options = optimoptions(@fminunc,'Algorithm','quasinewton',...
'Display','iter','Gradobj','on','TolFun',10^-8)
1 回答
有关目标函数passing extra parameters的数学帮助文章:
您可以使用
@(...)
运算符为函数生成一个匿名函数句柄,该句柄仅依赖于单个参数 .从原始页面(您的
objfun
是parameterfun
):