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
