Version history
What's new in v3.2
- In-place left-multiplication
mul!(Y, X, A::LinearMap)is now allowed forX::AbstractMatrixand implemented via the adjoint equationY' = A'X'.
What's new in v3.1
- In Julia v1.3 and above,
LinearMap-typed objects are callable onAbstractVectors: ForL::LinearMapandx::AbstractVector,L(x) = L*x.
What's new in v3.0
- BREAKING change: Internally, any dependence on former
A*_mul_B!methods is abandonned. For customLinearMapsubtypes, there are now two options:- In case your type is invariant under adjoint/transposition (i.e.,
adjoint(L::MyLinearMap)::MyLinearMapsimilar to, for instance,LinearCombinations orCompositeMaps,At_mul_B!andAc_mul_B!do not require any replacement! Rather, multiplication byL'is, in this case, handled bymul!(y, L::MyLinearMap, x[, α, β]). - Otherwise, you will need to define
mul!methods with the signaturemul!(y, L::TransposeMap{<:Any,MyLinearMap}, x[, α, β])andmul!(y, L::AdjointMap{<:Any,MyLinearMap}, x[, α, β]).
- In case your type is invariant under adjoint/transposition (i.e.,
- Left multiplying by a transpose or adjoint vector (e.g.,
y'*A) produces a transpose or adjoint vector output, rather than a compositeLinearMap. - Block concatenation now handles matrices and vectors directly by internal promotion to
LinearMaps. For[h/v/hc]catit suffices to have aLinearMapobject anywhere in the list of arguments. For the block-diagonal concatenation viaSparseArrays.blockdiag, aLinearMapobject has to appear among the first 8 arguments. This restriction, however, does not apply to block-diagonal concatenation viaBase.cat(As...; dims=(1,2)). - Introduction of more expressive and visually appealing
showmethods, replacing the fallback to the genericshow.
What's new in v2.7
- Potential reduction of memory allocations in multiplication of
LinearCombinations,BlockMaps, and real- or complex-scaledLinearMaps. For the latter, a new internal typeScaledMaphas been introduced. - Multiplication code for
CompositeMaps has been refactored to facilitate to provide memory for storage of intermediate results by directly calling helper functions.
What's new in v2.6
- New feature: "lazy" Kronecker product, Kronecker sums, and powers thereof for
LinearMaps.AbstractMatrixobjects are promoted toLinearMaps if one of the first 8 Kronecker factors is aLinearMapobject. - Compatibility with the generic multiply-and-add interface (a.k.a. 5-arg
mul!) introduced in julia v1.3
What's new in v2.5
- New feature: concatenation of
LinearMaps objects withUniformScalings, consistent with (h-, v-, and hc-)concatenation of matrices. Note, matricesAmust be wrapped asLinearMap(A),UniformScalings are promoted toLinearMaps automatically.
What's new in v2.4
- Support restricted to Julia v1.0+.
What's new in v2.3
- Fully Julia v0.7/v1.0/v1.1 compatible.
- Full support of noncommutative number types such as quaternions.
What's new in v2.2
- Fully Julia v0.7/v1.0 compatible.
- A
convert(SparseMatrixCSC, A::LinearMap)function, that calls thesparsematrix generating function.
What's new in v2.1
- Fully Julia v0.7 compatible; dropped compatibility for previous versions of Julia from LinearMaps.jl v2.0.0 on.
- A 5-argument version for
mul!(y, A::LinearMap, x, α=1, β=0), which computesy := α * A * x + β * yand implements the usual 3-argumentmul!(y, A, x)for the defaultαandβ. - Synonymous
convert(Matrix, A::LinearMap)andconvert(Array, A::LinearMap)functions, that call theMatrixconstructor and return the matrix representation ofA. - Multiplication with matrices, interpreted as a block row vector of vectors:
mul!(Y::AbstractArray, A::LinearMap, X::AbstractArray, α=1, β=0): appliesAto each column ofXand stores the result in-place in the corresponding column ofY;- for the out-of-place multiplication, the approach is to compute
convert(Matrix, A * X); this is equivalent to applyingAto each column ofX. In generic code which handles bothA::AbstractMatrixandA::LinearMap, the additional call toconvertis a noop whenAis a matrix.
- Full compatibility with Arpack.jl's
eigsandsvds; previously onlyeigswas working. For more, nicely collaborating packages see the Example section.