【问题标题】:Matlab @fminunc objective function optimizationMatlab @fminunc 目标函数优化
【发布时间】:2023-04-04 11:15:01
【问题描述】:

我目前正在Matlab中练习一个简单的函数优化,希望您能对以下错误提供一点帮助/解释:

%quadramin.m
function z=quadramin(param,data);
z=data.*(param(1).^2 - param(2).^3)+3;

%quadramin_lik.m
function quadlik = quadramin_lik(param,data);
%pseudo/ad-hoc log-likelihood function
quadlik = quadramin(param,data)- 10;

%script.m
data=trnd(5,6,1);
param0=[2,3];
[param_eq,exitflag,output,grad,hessian] = ... 
fminunc(@(param) quadramin_lik(param,data),param0)

执行 %script.m 后的输出:使用 fminunc 时出错(第 333 行) 用户提供的目标函数必须返回一个标量值。

ps:用户定义的函数 quadramin && quadramin_lik 确实返回值,这看起来很矛盾。

谢谢

【问题讨论】:

  • 您的两个函数都返回一个值向量,而fminunc 要求该函数返回一个标量/单个值。错误很明显。函数fminunc 试图找到最小化成本函数的最佳解决方案,因此您需要提供的是成本函数。因此,也许在返回之前尝试对每个函数中的结果求和......但这样做并不能保证全局最小值,因为fminunc 假设您的成本函数是凸的。
  • 对伪对数函数求和以返回标量/单个值确实有效。感谢cmets。最后,如果我想使用@fmincon,如果0<=x(1)<=2x(2) 属于R+,我是否正确设置lb=[0,2], ub=[0,+inf] ?简而言之param_eq = fmincon(@(param) quadramin_lik(param,data),param0,[],[],[],[],[0,2],[0, inf])?干杯
  • 我不知道您的线性程序是如何设置的,所以我无法评论您编码的内容是否正确。
  • 它不应该,先验,太重要,但我非常感谢提出和解决的主要标量问题,因为我无法猜测这个错误的原因。干杯

标签: matlab function optimization maximize


【解决方案1】:

您的两个函数都返回一个值向量,而fminunc 要求该函数返回一个标量/单个值。错误很明显。函数fminunc 试图找到最小化成本函数的最佳解决方案,因此您需要提供的是成本函数。

因此,也许在返回它们之前尝试对每个函数中的结果求和......但这样做并不能保证全局最小值,因为 fminunc 假设您的成本函数是凸的。但是,从计算对数似然度时的 cmets 来看,求和是您应该做的任何事情!

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 2016-09-13
    • 2023-03-10
    • 2012-10-15
    相关资源
    最近更新 更多