Mercurial > repos > public > sbplib
view minorsSym.m @ 128:f7629720f1b7
toString: added support for symbolic expressions
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 03 Feb 2016 17:41:19 +0100 |
parents | 967152d7d58b |
children |
line wrap: on
line source
function ineq = minorsSym(B) B [n, m] = size(B); if n ~= m error('B must be square'); end subB = {}; ks = {}; ind = 1:n; for k = 1:n C = nchoosek(ind,k); for i = 1:size(C,1) ks{end + 1} = k; subB{end + 1} = B(C(i,:),C(i,:)); end end for i = 1:length(subB) fprintf('%d:\n', ks{i}); disp(subB{i}) minor{i} = det(subB{i}); end for i = 1:length(subB) fprintf('%d:\n', ks{i}); disp(minor{i}); if mod(ks{i},2) == 0 ineq{i} = minor{i} >= 0; else ineq{i} = minor{i} <= 0; end end ineqsys = true; for i = 1:length(ineq) ineqsys = ineqsys & ineq{i}; end ineq = simplify(ineqsys) end % B is positive semidefinite if all minors are non-negative % B is negative semidefinite if all odd minors are non-positive and all even minors are non-negative