gusucode.com > qit_matlab_0.10.0工具箱源码程序 > qit/utils/rand_positive.m
function A = rand_positive(n) % RAND_POSITIVE Random n*n positive semidefinite matrix. % A = rand_positive(n) % % Normalized to trace(A) = 1. % Since A has all-real eigenvalues, it is Hermitian by construction. % Ville Bergholm 2008-2012 d = rand_pu(n); % random partition of unity U = rand_U(n); % random unitary A = U'*diag(d)*U; A = (A+A')/2; % eliminate rounding errors return % TODO alternative: inverse purification s = state(0, [n, k]); % rank k state op s = u_propagate(s, rand_U(n*k)); % expensive and wasteful... s = ptrace(s, 2); A = s.data; end