3

Recall that a Hurwitz matrix is one whose eigenvalues lie in the left half plane; strictly Hurwitz such that they are in the strict left half plane.

Is there way to randomly generate Hurwitz matrices? I came up with two methods,

  • Randomly sample $A$ from the uniform distribution (each element of $A$ is picked from $[0,1]$ with equal probability), then $M = -(A+A^T)/2-nI$ will have eigenvalues in the strict left half plane.
  • Randomly sample a $(n-1)\times (n-1)$ matrix $A$ from the uniform distribution (again in the sense above). Then create a matrix $n\times n$ matrix $M$ such that for each row, the diagonal value is the negative row sum of corresponding row of $A$ and the other values are the row of $A$. Then $M$ will be Hurwitz (not strict).

Can we say anything about the distribution of eigenvalues in each of the cases? Given a subset of the left half plane, is there any method that will generate random Hurwitz matrices whose eigenvalues are uniformly distributed over this subset?

If someone has answers for the case where $A$ is sampled from the normal distribution (again in the elementwise sense) that would be welcome too.

EDIT: Since asking this I have come across Wishart matrices and Wigner distribution so I am happy if someone just answers the previous question; for which I think this method will generate sampled matrices from with eigenvalues in any finite subset of the real line (but from which distribution I know not).

ITA
  • 1,893

1 Answers1

2

I don't know if you already solved your problem, but I usually do the following:

  1. You can use the function $\texttt{rss}$, if you're a MATLAB user. https://www.mathworks.com/help/control/ref/rss.html This function generates a stable SS system $(A,B,C,D)$ with $A$ Hurwitz.
  2. Alternatively, you can first generate a random diagonal matrix $\texttt{D = diag(-rand(1,n)*a)}, a \in \mathbb{R}_+$ (or manually choose it), and then generate a random invertible matrix $\texttt{V = randn(n)}$. Your random Hurwitz matrix is then the similarity transformation $\texttt{A = V*D/V}$ with eigenvalues $\mathbf{\lambda} = \mbox{diag}(D)$.

More generally, you can sample eigenvalues from a finite subset as $\texttt{D = diag(randsample(eigs,n))}$, where $\texttt{eigs}$ is a vector of eigenvalues to sample from. The choice of distribution to sample the eigenvalues from is up to you.

EDIT: Make sure to use $\texttt{randsample(eigs,n, true)}$ to sample with replacement, if you so desire.

V.S.e.H.
  • 2,889
  • 1
  • 11
  • 23