首页 文章

用Matlab优化

提问于
浏览
2

在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 回答

  • 3

    有关目标函数passing extra parameters的数学帮助文章:

    您可以使用 @(...) 运算符为函数生成一个匿名函数句柄,该句柄仅依赖于单个参数 .

    a = 4; b = 2.1; c = 4;
    f = @(x)objfun(x,a,b,c)
    

    从原始页面(您的 objfunparameterfun ):

    注意:匿名函数中传递的参数是创建匿名函数时存在的参数 . 考虑例子a = 4; b = 2.1; c = 4;
    f = @(x)parameterfun(x,a,b,c)
    假设您随后将a更改为3并运行[x,fval] = fminunc(f,x0)
    你得到了和以前一样的答案,因为parameterfun使用a = 4,即创建f时的值 . 要更改传递给函数的参数,请通过重新输入来更新匿名函数:a = 3;
    f = @(x)parameterfun(x,a,b,c)

相关问题