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.

=================

=================

1 Answer

1

=================

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@RandomReal[{-1,1},{r,r}](*orthonormal eigenvectors*)

A=Transpose[v].eig.v

Eigenvalues[A]