gpt4 book ai didi

matlab - 用Matlab进行优化

转载 作者:行者123 更新时间:2023-12-03 17:22:43 25 4
gpt4 key购买 nike

在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)

最佳答案

关于目标函数,有关于passing extra parameters的mathworks帮助文章:

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

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)

关于matlab - 用Matlab进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29047081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com