function v = optQf( Q , q ) %function v = optQf( Q , q ) % % Given the data structure encoding a Quadratic function % % f( x ) = (1/2) x^T * Q * x + q * x % % returns the value of f() in the "putative minimum" (or maximum), i.e., % the point % % xStar = Q \ -q; % % Input: % % - Q ([ n x n ] real symmetric matrix, not necessarily positive % semidefinite): the quadratic part of f % % - q ([ n x 1 ] real column vector): the linear part of f % % Output: % % - f( xStar ) % %{ ======================================= Author: Antonio Frangioni Date: 30-09-22 Version 0.10 Copyright Antonio Frangioni ======================================= %} if ~ isreal( Q ) error( 'Q not a real matrix' ); end n = size( Q , 1 ); if n <= 1 error( 'Q is too small' ); end if n ~= size( Q , 2 ) error( 'Q is not square' ); end if ~ isreal( q ) error( 'q not a real vector' ); end if size( q , 2 ) ~= 1 error( 'q is not a (column) vector' ); end if size( q , 1 ) ~= n error( 'q size does not match with Q' ); end % "solve the problem" - - - - - - - - - - - - - - - - - - - - - - - - - - - % ignore if Q is singular xStar = Q \ -q; v = 0.5 * xStar' * Q * xStar + q' * xStar; end