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}]

Tags:

Matrix

Random