Source code for toqito.matrix_props.is_diagonally_dominant
"""Checks if the matrix is diagonally dominant."""
import numpy as np
from toqito.matrix_props import is_square
[docs]
def is_diagonally_dominant(mat: np.ndarray, is_strict: bool = True) -> bool:
r"""Check if matrix is diagnal dominant (DD) [@WikiDiagDom].
A matrix is diagonally dominant if the matrix is square
and if for every row of the matrix, the magnitude of the diagonal entry in a row is greater
than or equal to the sum of the magnitudes of all the other (non-diagonal) entries in that row.
Examples:
The following is an example of a 3-by-3 diagonal matrix:
\[
A = \begin{pmatrix}
2 & -1 & 0 \\
0 & 2 & -1 \\
0 & -1 & 2
\end{pmatrix}
\]
our function indicates that this is indeed a diagonally dominant matrix.
```python exec="1" source="above"
import numpy as np
from toqito.matrix_props import is_diagonally_dominant
A = np.array([[2, -1, 0], [0, 2, -1], [0, -1, 2]])
print(is_diagonally_dominant(A))
```
Alternatively, the following example matrix \(B\) defined as
\[
B = \begin{pmatrix}
-1 & 2 \\
-1 & -1
\end{pmatrix}
\]
is not diagonally dominant.
```python exec="1" source="above"
import numpy as np
from toqito.matrix_props import is_diagonally_dominant
B = np.array([[-1, 2], [-1, -1]])
print(is_diagonally_dominant(B))
```
Args:
mat: Matrix to check.
is_strict: Whether the inequality is strict.
Returns:
Return `True` if matrix is diagnally dominant, and `False` otherwise.
"""
if not is_square(mat):
return False
mat = np.abs(mat)
diag_coeffs = np.diag(mat)
row_sum = np.sum(mat, axis=1) - diag_coeffs
return bool(np.all(diag_coeffs > row_sum) if is_strict else np.all(diag_coeffs >= row_sum))