how to use fmincon solver for optimising a continuously varying function?
2 次查看(过去 30 天)
显示 更早的评论
Hi
I need to optimize a function of the form
y(i)= exp(-a(i)/x(1)) + 1.285 + ((b(i)^2)*x(2)) - (x(3)*c(i)*(1-exp(-c(i)/(x(3)*x(2))));
a(i) and c(i) are inputs. b(i) is dependant on a(i). The matrices a,b,c are obtained first. x(1),x(2),x(3) are the coefficients to be optimized. x>=0 .
When I try to use fmincon solver, it returns an error ::
Error using fmincon (line 607)
User supplied objective function must return a scalar value.
How do I rectify this?
Thanks
Nadia
0 个评论
采纳的回答
Walter Roberson
2016-6-2
function y = obj(x, a, b, c)
y = sum( ( exp(-a./x(1)) + 1.285 + ((b.^2).*x(2)) - (x(3).*c.*(1-exp(-c./(x(3).*x(2))))) ).^2 );
You need to recheck your equation as you have a missing ")" in it. I put it at the end.
To use the above:
fmincon( @(x) obj(x, a, b, c), x0, .....)
What will be minimized is the sum of squares. This is, in other words, a least squared minimimization.
2 个评论
Walter Roberson
2016-6-2
lsqnonlin has better residue analysis, but the available algorithms are the same I think. Your only constraint is non-negative, which lsqnonlin can handle through the lb argument. If you had any linear or nonlinear constraints then you would have to use fmincon.
For lsqnonlin you would not do the sum() or the squaring yourself in the objective function.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!