cirq.bidiagonalize_real_matrix_pair_with_symmetric_products

cirq.bidiagonalize_real_matrix_pair_with_symmetric_products(mat1: numpy.ndarray, mat2: numpy.ndarray, tolerance: cirq.linalg.tolerance.Tolerance = Tolerance(rtol=1e-05, atol=1e-08, equal_nan=False)) → Tuple[numpy.ndarray, numpy.ndarray][source]

Finds orthogonal matrices that diagonalize both mat1 and mat2.

Requires mat1 and mat2 to be real.
Requires mat1.T @ mat2 to be symmetric.
Requires mat1 @ mat2.T to be symmetric.
Parameters:
  • mat1 – One of the real matrices.
  • mat2 – The other real matrix.
  • tolerance – Numeric error thresholds.
Returns:

A tuple (L, R) of two orthogonal matrices, such that both L @ mat1 @ R and L @ mat2 @ R are diagonal matrices.

Raises:
  • ValueError – Matrices don’t meet preconditions (e.g. not real).
  • ArithmeticError – Failed to meet specified tolerance.