【发布时间】: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)<=2和x(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