Joint Diagonalization

JointDiag.joint_diagFunction
 joint_diag(M::Vector{Matrix{C}}, Solver::RandJointDiag)

Compute the joint diagonalization of an array M of square matrices M[1],...,M[n] using a random combination of the matrices and its Schur factorization to get the common eigenvectors. It outputs

  • X the vectors of eigenvalues, which are the columns of X.
  • E the common eigenvectors such that M[i]*E=E*diagm(X[i,:])
source
 joint_diag(M::Vector{Matrix{C}}, Solver::NewtonJointDiag)

Compute the joint diagonalization of an array M of square matrices M[1], ..., M[n] by applying a Newton-type iteration to minimize the off-diagonal norm of the matrices F*M[i]*E with the constraint F*E=I. It outputs

  • X the vectors of eigenvalues, which are the columns of X.
  • E the common eigenvectors such that M[i]*E=E*diagm(X[i,:])

It implements the method described in

[KMY22] Khouja, Rima, Mourrain, Bernard, and Yakoubsohn, Jean-Claude. Newton-type methods for simultaneous matrix diagonalization. Calcolo 59.4 (2022): 38. doi:10.1007/s10092-022-00484-3, https://hal.science/hal-03390265.

source
 joint_diag(M::Vector{Matrix{C}}, Solver::JacobiJointDiag)

Compute the joint diagonalization of an array M of square matrices M[1], ..., M[n] by applying a Jacobi-type iteration to minimize the off-diagonal norm of the matrices F*M[i]*E with the constraint F*E=I. It outputs

  • X the vectors of eigenvalues, which are the columns of X.
  • E the common eigenvectors such that M[i]*E=E*diagm(X[i,:])
source
JointDiag.joint_reduceFunction
 joint_reduce(H::Vector{Matrix{C}}, Solver = JRS())

Compute the joint diagonal reduction of an array H of square matrices H[1],...,H[n] using a random combination of the matrices, SVD and rank reduction to obtain vectors of eigenvalues X, left factor U, right factor V such that H=[U*diagm(X[i,:])*V for i in 1:length(H)] It outputs

  • X the eigenvalue matrix, which columns are the vectors of common eigenvalues
  • U the left factor, which columns are orthogonal
  • V the right factor, which rows are orthogonal
source
JointDiag.JRSType

Describe the Joint Reduce Solver

 - `rank` is a rank function used to determine the rank from the singular values
 - `diag_solver`is the solver used for the joint diagonalization
source
JointDiag.ReorderedSchurSolverType
struct ReorderedSchurSolver{T,RNGT<:Random.AbstractRNG} <: AbstractSolver
    ɛ::T
    rng::RNGT
end

Simultaneous diagonalization of commuting matrices using the method of [CGT97].

[CGT97] Corless, R. M.; Gianni, P. M. & Trager, B. M. A reordered Schur factorization method for zero-dimensional polynomial systems with multiple roots Proceedings of the 1997 international symposium on Symbolic and algebraic computation, 1997, 133-140

source
JointDiag.cluster_eigenvaluesFunction
cluster_eigenvalues(_atol, v)

Clustering the values v following [CGT97].

[CGT97] Corless, R. M.; Gianni, P. M. & Trager, B. M. A reordered Schur factorization method for zero-dimensional polynomial systems with multiple roots Proceedings of the 1997 international symposium on Symbolic and algebraic computation, 1997, 133-140

source