Generate random nxn matrix with all negative eigenvalues
RandomVariate[NormalDistribution[], {r, r}]
does not give you normalized eigenvectors. To obtain an orthonormal basis, you can first generate a random matrix, and then apply Orthogonalize
to it. Following is the correct code.
r=4;(*matrix dimension*)
dom={1,10};(*domain of random numbers*)
eig=DiagonalMatrix[-RandomInteger[dom,r]] (*eigenvalues in diagonal matrix*)
v=Orthogonalize@RandomVariate[NormalDistribution[], {r, r}](*orthonormal eigenvectors*)
A=Transpose[v].eig.v
Eigenvalues[A]
Just make a random matrix with all positive eigenvalues and then add a minus sign:
r = 4;
M = -#.ConjugateTranspose[#]&[RandomVariate[NormalDistribution[], {r,r,2}].{1,I}]