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

Look-ahead Lanczos Biorthogonalization #321

Open
wants to merge 19 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ uuid = "42fd0dbc-a981-5370-80f2-aaf504508153"
version = "0.9.2"

[deps]
BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
Expand All @@ -12,3 +13,4 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
[compat]
RecipesBase = "0.6, 0.7, 0.8, 1.0"
julia = "1.3"
BlockDiagonals = "0.1"
4 changes: 3 additions & 1 deletion docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@ makedocs(
"BiCGStab(l)" => "linear_systems/bicgstabl.md",
"IDR(s)" => "linear_systems/idrs.md",
"Restarted GMRES" => "linear_systems/gmres.md",
"QMR" => "linear_systems/qmr.md",
"LSMR" => "linear_systems/lsmr.md",
"LSQR" => "linear_systems/lsqr.md",
"Stationary methods" => "linear_systems/stationary.md"
"Stationary methods" => "linear_systems/stationary.md",
"LAL" => "linear_systems/lal.md"
],
"Eigenproblems" => [
"Power method" => "eigenproblems/power_method.md",
Expand Down
17 changes: 17 additions & 0 deletions docs/src/linear_systems/lal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# [Look-Ahead Lanczos Bi-Orthogonalization](@id LAL)

The Look-ahead Lanczos Bi-orthogonalization process is a generalization of the Lanczos
bi-orthoganilization (as used in, for instance, [QMR](@ref)) [^Freund1993], [^Freund1994]. The look-ahead process detects
(near-)singularities during the construction of the Lanczos iterates, known as break-down,
and skips over them. This is particularly advantageous for linear systems with large
null-spaces or eigenvalues close to 0.

We provide an iterator interface for the Lanczos decomposition (Freund, 1994),
where the look-ahead Lanczos process is implemented as a two-term coupled recurrence.

## Usage

```@docs
IterativeSolvers.LookAheadLanczosDecomp
IterativeSolvers.LookAheadLanczosDecompLog
```
10 changes: 1 addition & 9 deletions docs/src/linear_systems/qmr.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,9 @@ qmr!
```

## Implementation details
QMR exploits the tridiagonal structure of the Hessenberg matrix. Although QMR is similar to GMRES, where instead of using the Arnoldi process, a pair of biorthogonal vector spaces $V$ and $W$ is constructed via the Lanczos process. It requires that the adjoint of $A$ `adjoint(A)` be available.
QMR exploits the tridiagonal structure of the Hessenberg matrix. Although QMR is similar to GMRES, where instead of using the Arnoldi process, a pair of biorthogonal vector spaces $V$ and $W$ is constructed via the Lanczos process. It requires that the adjoint of $A$ `adjoint(A)` be available [^Saad2003], [^Freund1990].

QMR enables the computation of $V$ and $W$ via a three-term recurrence. A three-term recurrence for the projection onto the solution vector can also be constructed from these values, using the portion of the last column of the Hessenberg matrix. Therefore we pre-allocate only eight vectors.

For more detail on the implementation see the original paper [^Freund1990] or [^Saad2003].

!!! tip
QMR can be used as an [iterator](@ref Iterators) via `qmr_iterable!`. This makes it possible to access the next, current, and previous Krylov basis vectors during the iteration.

[^Saad2003]:
Saad, Y. (2003). Interactive method for sparse linear system.
[^Freund1990]:
Freund, W. R., & Nachtigal, N. M. (1990). QMR : for a Quasi-Minimal
Residual Linear Method Systems. (December).
4 changes: 4 additions & 0 deletions src/IterativeSolvers.jl
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ include("history.jl")
# Factorizations
include("hessenberg.jl")

# Krylov subspace methods
include("limited_memory_matrices.jl")
include("lal.jl")

# Linear solvers
include("stationary.jl")
include("stationary_sparse.jl")
Expand Down
Loading