Description
Feature description
I'm new to interval computing. I'm a PhD student at Imperial College London. I have a suggestion, and I'm wondering how you handle this.
Certain operations on matrices are uncomputable. For instance, eigendecomposition of even "nice" matrices like symmetric matrices is not computable. What "uncomputable" means in practice is that "forwards numerical stability" is not attainable. The notion of "backwards numerical stability" may still be attainable and can suffice for certain use cases. Unfortunately, interval arithmetic in the naive sense cannot "handle" backwards stability. But this limitation can be by-passed.
My suggestion surrounds eigendecomposition. The API I propose should have three functions:
eigendecomp : Mat(Complex) -> (Mat(Complex), DiagMat(Complex))
,inv_eigendecomp : (Mat(Complex), DiagMat(Complex)) -> Mat(Complex)
lift : (Complex -> Complex) -> ((Mat(Complex), DiagMat(Complex)) -> (Mat(Complex), DiagMat(Complex)))
.
eigendecomp(M)
should produce a pair of matrices (P,D)
such that the matrix P is exact (and not interval valued!!) and D is interval-valued. P and D should be chosen so that P D P^-1
contains M
as snuggly as possible. The actual eigenvalues and eigenvectors of M don't matter because the eigenvectors of M in particular are not computable.
I also suggest that the purpose of eigendecomposition is to lift functions of type Complex -> Complex
to complex matrices. I suspect that the eigenvalues and eigenvectors are perhaps not entirely relevant, in practice.