Matlab 2020a outputs wrong fval for quadprog

2 次查看(过去 30 天)
Running the following code:
k = optimvar('k',2);
c = optimvar('c',2);
objec = (k-2)'*(k-2)+(c-1)'*(c-1);
prob = optimproblem('Objective',objec);
problem = prob2struct(prob);
[x,fval] = quadprog(problem);
sol.c = x(1:2);
sol.k = x(3:4);
% Matlab documention claims:
% [x,fval] = quadprog(___), for any input variables, also returns fval, the value of the objective function at x:
% fval = 0.5*x'*H*x + f'*x
fval
.5*x'*problem.H*x+problem.f'*x
% the real objective function value at x is
evaluate(objec,sol)
x'*problem.H*x+problem.f'*x
% it seems the 0.5 multiplication is incorrect and this is a bug
yields the folloing output:
fval =
-10
ans =
-10
ans =
0
ans =
0
Is this a known bug with quadprog in Matlab 2020a?

采纳的回答

Alan Weiss
Alan Weiss 2020-7-9
Your problem has an added constant term that quadprog does not take into account, though solve does. Did you try calling
[sol fval] = solve(prob)
sol =
struct with fields:
c: [2×1 double]
k: [2×1 double]
fval =
0
To compute things the way you want, try this, where fval is the result of your quadprog optimization:
fval + problem.f0
% and
.5*x'*problem.H*x+problem.f'*x + problem.f0
Alan Weiss
MATLAB mathematical toolbox documentation

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Quadratic Programming and Cone Programming 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by