Matrix Property System for `LinearOperator`s
marvinpfoertner opened this issue · 0 comments
marvinpfoertner commented
Is your feature request related to a problem? Please describe.
Currently, a LinearOperator
is unaware of any mathematical properties (e.g. symmetry, positive-definiteness, orthogonality) of the matrix it represents.
However, many algorithms acting on these matrices can be more efficient or in some cases only become tractable if these properties are known.
Give an example use case.
- Inversion of a positive-definite
LinearOperator
should be computed by Cholesky factorization - Inversion of an orthogonal
LinearOperator
should be computed by multiplying with the transpose
Describe the solution you'd like.
- add cached properties to the
LinearOperator
which use ternary logic to indicate whether the matrix has a particular property- return
True
if the matrix has the property - return
False
if the matrix does not have the property - return
None
if it is not known whether the matrix has the property
- return
- infer matrix properties after operations like addition and scalar multiplication
- add fallback checks to the
LinearOperator
base class - minimal set of properties
-
is_invertible
-
is_symmetric
-
is_positive_{semi}definite
-
is_{upper,lower}_triangular
-
is_orthogonal
-
is_diagonal
-
- additional properties
-
is_banded
-
is_tridiagonal
-
is_toeplitz
-
is_upper_hessenberg
-
- for symmetric operators, use
numpy.linalg.eigvalsh
asLinearOperator.eigvals
fallback and test order of eigenvalues
Additional context
Some of these properties are needed for #569