Question: I need to generate an nxn matrix with random entries, but I also need all of the eigenvalues to be negative (real or complex doesn't matter).
I have:

```
r = 4; (* matrix dimension *)
dom = {1, 10}; (* domain of random numbers *)
eig = DiagonalMatrix[-RandomInteger[dom, r]] (* eigenvalues in diagonal matrix *)
v = RandomVariate[NormalDistribution[], {r, r}] (* normalized eigenvectors? *)
A = v.eig.v
Eigenvalues[A]

```

It seems like this should work, as the eigenvalues are all negative, but sometimes I still get positive eigenvalues. What am I doing wrong here?

Thanks.

Answer: 
`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}]

```