y-z-zhang / SBD

A simple algorithm that finds a simultaneous block diagonalization of multiple matrices through the eigendecomposition of a single matrix.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SBD: Simultaneous Block Diagonalization of noncommuting matrices

This repository is part of the paper: Y. Zhang, V. Latora, and A. E. Motter, Unified treatment of synchronization patterns in generalized networks with higher-order, multilayer, and temporal interactions, Commun. Phys. 4, 195 (2021).

SBD is a simple and efficient algorithm for finding a (often finest) simultaneous block diagonalization of multiple matrices. The algorithm works by finding the eigendecomposition of a single matrix, which is a random linear combination of all the matrices to be simultaneously block diagonalized. The current algorithm is inspired by the results presented in K. Murota et al. Jpn. J. Ind. Appl. Math 27, 125–160 (2010). For an efficient algorithm that also guarantees the optimal SBD, see here.

The repository includes:

  1. sbd.py

Python implementation of the SBD algorithm.

  1. sbd.m

MATLAB implementation of the SBD algorithm.

  1. random_examples.m

Simple example demonstrating the use of the SBD algorithm to random matrices with predefined common block structure.

For an example application of the SBD code, see this nice Python package developed by A. Salova, which provides a unified treatment of cluster synchronization on hypergraphs.

About

A simple algorithm that finds a simultaneous block diagonalization of multiple matrices through the eigendecomposition of a single matrix.

License:MIT License


Languages

Language:Python 51.0%Language:MATLAB 49.0%