Dear Julia users,

I have just added a new Julia package for working with linear maps, also 
known as linear transformations or linear operators (although the latter 
term restricts to the slightly more restricted case where domain and 
codomain are the same, i.e. number of rows and columns of the matrix 
representation are the same). The idea is that a LinearMap object is like 
an AbstractMatrix in that it transforms vectors into vectors by 
multiplication, but that it does not need to be represented as a Matrix.

The package provides functionality for wrapping linear functions without 
explicit matrix representation (e.g. cumsum, fft, diff, ... ) as LinearMap 
objects, for combining LinearMap objects via composition or linear 
combination, and for taking transposes. All of these operations are 
evaluated 'lazily', i.e. only when the combined object is multiplied with a 
vector will the operations be performed, and in such a way that only matrix 
vector multiplications and vector additions need to be computed. In 
addition, these operations are implemented  with efficiency in mind. They 
try to minimise the number of temporaries (i.e. minimal memory allocation) 
and make available mutating operations such as A_mul_B!, even when this was 
not provided by e.g. the function that performs the matrix vector product. 
In addition, they can be combined with normal AbstractMatrix objects and 
with the built in identity I (UniformScaling). 

The application of this package is in first place in the context of 
iterative algorithms for linear systems or eigenvalue problems, which 
should be implemented using duck typing of the matrix/operator argument. In 
particular, it works well in combination with eigs, Julia's built in 
wrapper for Arpack. Like AbstractMatrix objects, LinearMap objects respond 
to the methods size, isreal, eltype, issym, ishermitian and isposdef, where 
it is even attempted to cleverly guess the correct values for these latter 
properties (i.e. A'*B*B'*A will be recognised as a positive definite 
hermitian linear map).

Check it out at https://github.com/Jutho/LinearMaps.jl . Comments and 
suggestions are appreciated.

Jutho

Reply via email to