2015-06-02 160 views
0

我目前练Matlab中一个简单的函数的优化,希望你可以与下面的错误一点帮助/解释为:Matlab的@fminunc目标函数优化

执行%script.m后
%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) 

输出:使用fminunc时出错(第333行) 用户提供的目标函数必须返回标量值。

PS:这看起来自相矛盾的用户定义函数quadramin & & quadramin_lik做返回值。

感谢

+2

这两个函数都返回值的向量,而'fminunc'则要求该函数返回一个**标量/单**值。错误很明显。函数fminunc试图找到最小化成本函数的最佳解决方案,所以你需要提供的是一个成本函数。因此,也许在返回它们之前尝试总结每个函数中的结果......但这样做并不能保证全局最小值,因为'fminunc'假定您的成本函数是凸的。 – rayryeng

+0

总结假的log-likehood函数返回一个标量/单值的确可以工作。感谢您的评论。最后,如果我想使用@fmincon,如果'0 <= x(1)<= 2'和'x',我可以正确设置'lb = [0,2],ub = [0,+ inf] (2)'属于R +?简而言之'param_eq = fmincon(@(param)quadramin_lik(param,data),param0,[],[],[],[],[0,2],[0,inf])''?干杯 – owner

+0

我不知道你的线性程序是如何设置的,所以我不能评论你所编码的内容是否正确。 – rayryeng

回答

2

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

因此,也许尝试返回他们....但这样做,因为fminunc假设你的成本函数是凸并不能保证全局最小值之前在每个功能的结果相加。然而,根据你的评论来判断,你计算的是日志的可能性,那么总结就是你应该做的任何事情!