4
$\begingroup$

I would like to diagonalize a very large matrix that has the same property as quaternion matrices (in a sense that the matrix can be written as a linear combination of quaternions): $$ H = \left(\begin{array}{cc} H_{11} & H_{12} \\ -H^\ast_{12} & H^\ast_{11} \end{array}\right), \quad U^\dagger HU = \epsilon $$ where $\epsilon$ is a diagonal matrix, $U$ is a unitary matrix and $U$ has the same symmetry $$ U = \left(\begin{array}{cc} U_{11} & U_{12} \\ -U^\ast_{12} & U^\ast_{11} \end{array}\right) $$ Note that there are $dim(\epsilon)/2$ sets of identical eivenvalues.

Of course it is trivial to diagonalize $H$ in a brute-force way to get right eivenvalues; however, for some reasons I need a symmetry-adapted set of eivenvectors as shown above. Is there a way to transform the matrix obtained by brute-force diagonalization to an symmetry-adapted matrix above? Although I am aware of some papers such as (J. Math. Phys. 46, 052106 (2005); http://dx.doi.org/10.1063/1.1896386), which suggest $$ \left(\begin{array}{cc} V_{11} & V_{12} \\ V_{21} & V_{11} \end{array}\right)\to \left(\begin{array}{cc} U_{11} & U_{12} \\ -U^\ast_{12} & U^\ast_{11} \end{array}\right) $$ where $V^\dagger H V = \epsilon$ and $$ U_{11} = \frac{1}{2}(V_{11}+V_{22}^\ast),\quad U_{12}=\frac{1}{2}(V_{12}-V_{21}^\ast) $$ it does not seem to preserve orthogonality of the eigenvectors.

$\endgroup$
2
  • $\begingroup$ Writing this so that others may use it: My implementation of the Householder-like algorithm is github.com/shiozaki/Quaternion-Diagonalization. However, it is neither threaded nor parallelized so far. $\endgroup$ Commented Jan 14, 2014 at 2:16
  • $\begingroup$ Update: I implemented a blocked version of the Paige-Van Loan algorithm (arxiv.org/abs/1512.08934). Code is available on github under the FreeBSD license - use the above link. $\endgroup$ Commented Dec 31, 2015 at 21:58

2 Answers 2

3
$\begingroup$

I am rather certain that you cannot modify a standard diagonalization to the structured diagonalization that you want. I have seen such a method used, but it is expected to fail occasionally, especially for a large matrix. What you expect are the eigenvalues to all have even multiplicity, and then you modify the basis of each eigenspace so that if [v;w] is an eigenvector, you also use [-conj(w); conj(v)]. (Pardon the Matlab notation.) When numerical errors are involved, you will find it hard to figure which eigenvectors to group into even-multiplicity eigenspaces.

It seems your matrix is also Hermitian. I suggest that you can use HAPACK, Fortran Software for (Skew-)Hamiltonian Eigenvalue Problems, available from http://www.tu-chemnitz.de/mathematik/hapack. For a dense 10,000-by-10,000 matrix, this may work (give time and much RAM), as it takes advantage of one symmetry, skew-Hamiltonian in CS parlance. However, the code probably ignores the fact that your matrix is Hermitian. Note that Hermitian plus skew-Hamiltonian implies the quaternionic structure you have.

You can also use the Page / Van Loan algorithm to get to a block diagonal form and then deal with those separately. This is discussed in "Topological insulators and C∗-algebras: Theory and numerical practice" by myself and Hastings, Annals of Physics Volume 326, Issue 7, July 2011, Pages 1699–1759. You can grab some Matlab code associated to the paper "Computing a logarithm of a unitary matrix with general spectrum" Arxiv:1203.6151. A newer version of the this paper exists and will soon be published, but the latest Matlab code is at http://hdl.handle.net/1928/23450.

$\endgroup$
0
2
$\begingroup$

Sangwine and Le Bihan have developed an algorithm, implemented in MATLAB, that can be used for the diagonalization (or singular value decomposition) of matrices with quaternion elements.

A Jacobi algorithm is discussed in Computing the SVD of a quaternion matrix. The MATLAB toolbox is here.

$\endgroup$
1
  • $\begingroup$ Thank you! This is basically what I want to do, but the application would be for matrices whose dimension is 10,000. So I would still like to first diagonalize it with scalapack to form V above, and somehow transform it to symmetry adapted eivenvectors. I thought that mathematically there should be a way - shouldn't it? $\endgroup$ Commented Nov 6, 2013 at 15:34

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .