first commit with current lessons
This commit is contained in:
67
10-04/optQf.m
Normal file
67
10-04/optQf.m
Normal file
@ -0,0 +1,67 @@
|
||||
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
|
||||
Reference in New Issue
Block a user