我目前正在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&& amp; quadramin_lik返回值。
由于
答案 0 :(得分:2)
两个函数都返回值向量,而fminunc
要求函数返回标量/单个值。错误很清楚。函数fminunc
正在尝试找到最小化成本函数的最佳解决方案,因此您需要提供的是成本函数。
因此,也许在返回它们之前尝试对每个函数中的结果进行求和....但这样做并不能保证全局最小值,因为fminunc假设你的成本函数是凸的。但是,从您的评论判断,因为您正在计算对数可能性,那么求和就是您应该做的任何事情!