Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Matrix Property System for LinearOperators #571

Open
2 of 11 tasks
marvinpfoertner opened this issue Nov 18, 2021 · 0 comments
Open
2 of 11 tasks

Matrix Property System for LinearOperators #571

marvinpfoertner opened this issue Nov 18, 2021 · 0 comments
Assignees
Labels
feature request Requests for features to be implemented improvement Improvements of existing functionality linops Issues related to linear operators

Comments

@marvinpfoertner
Copy link
Collaborator

marvinpfoertner commented Nov 18, 2021

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
  • 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 as LinearOperator.eigvals fallback and test order of eigenvalues

Additional context
Some of these properties are needed for #569

@marvinpfoertner marvinpfoertner added feature request Requests for features to be implemented improvement Improvements of existing functionality linops Issues related to linear operators labels Nov 18, 2021
@marvinpfoertner marvinpfoertner self-assigned this Nov 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request Requests for features to be implemented improvement Improvements of existing functionality linops Issues related to linear operators
Projects
None yet
Development

No branches or pull requests

1 participant