Matlab 2020a outputs wrong fval for quadprog

1 visualización (últimos 30 días)
Paul Gesel
Paul Gesel el 8 de Jul. de 2020
Respondida: Alan Weiss el 9 de Jul. de 2020
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?

Respuesta aceptada

Alan Weiss
Alan Weiss el 9 de Jul. de 2020
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

Más respuestas (0)

Categorías

Más información sobre Quadratic Programming and Cone Programming en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by