Si desea tener un mayor control sobre la matriz PSD simétrica generada, por ejemplo, para generar un conjunto de datos de validación sintético, dispone de una serie de parámetros. Una matriz PSD simétrica corresponde a una hiperelipse en el espacio N-dimensional, con todos los grados de libertad relacionados:
- Rotaciones.
- Longitudes de los ejes.
Así, para una matriz bidimensional (es decir, una elipse 2d), tendrá 1 rotación + 2 ejes = 3 parámetros.
Si las rotaciones nos traen a la mente las matrices ortogonales, es un tren de pensamiento correcto, ya que la construcción es de nuevo $\Sigma=ODO^T$ con $\Sigma$ siendo la matriz Sym.PSD producida, $O$ la matriz de rotación (que es ortogonal), y $D$ la matriz diagonal, cuyos elementos diagonales controlarán la longitud de los ejes de la elipse.
El siguiente código de Matlab traza 16 conjuntos de datos bidimensionales con distribución gaussiana basados en $\Sigma$ con un ángulo creciente. El código para la generación aleatoria de los parámetros está en los comentarios.
figure;
mu = [0,0];
for i=1:16
subplot(4,4,i)
theta = (i/16)*2*pi; % theta = rand*2*pi;
U=[cos(theta), -sin(theta); sin(theta) cos(theta)];
% The diagonal's elements control the lengths of the axes
D = [10, 0; 0, 1]; % D = diag(rand(2,1));
sigma = U*D*U';
data = mvnrnd(mu,sigma,1000);
plot(data(:,1),data(:,2),'+'); axis([-6 6 -6 6]); hold on;
end
Para más dimensiones, la matriz Diagonal es sencilla (como la anterior), y la $U$ debe derivar de la multiplicación de las matrices de rotación.