Skip to content

Commit 16f0f68

Browse files
authored
Merge pull request #214 from haampie/mohamedmaster
LOBPCG docs take 2
2 parents 5ca090c + c4a60a1 commit 16f0f68

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

docs/make.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ makedocs(
2323
],
2424
"Eigenproblems" => [
2525
"Power method" => "eigenproblems/power_method.md",
26+
"LOBPCG" => "eigenproblems/lobpcg.md"
2627
],
2728
"SVDL" => "svd/svdl.md",
2829
"The iterator approach" => "iterators.md",
@@ -37,7 +38,7 @@ deploydocs(
3738
repo = "github.com/JuliaMath/IterativeSolvers.jl.git",
3839
target = "build",
3940
osname = "linux",
40-
julia = "0.6",
41+
julia = "0.7",
4142
deps = nothing,
4243
make = nothing,
4344
)

docs/src/eigenproblems/lobpcg.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# [Locally optimal block preconditioned conjugate gradient (LOBPCG)](@id LOBPCG)
2+
3+
Solves the generalized eigenproblem $Ax = λBx$ approximately where $A$ and $B$ are Hermitian linear maps, and $B$ is positive definite. $B$ is taken to be the identity by default. It can find the smallest (or largest) `k` eigenvalues and their corresponding eigenvectors which are B-orthonormal. It also admits a preconditioner and a "constraints" matrix `C`, such that the algorithm returns the smallest (or largest) eigenvalues associated with the eigenvectors in the nullspace of `C'B`.
4+
5+
## Usage
6+
7+
```@docs
8+
lobpcg
9+
lobpcg!
10+
```
11+
12+
## Implementation Details
13+
14+
A `LOBPCGIterator` is created to pre-allocate all the memory required by the method using the constructor `LOBPCGIterator(A, B, largest, X, P, C)` where `A` and `B` are the matrices from the generalized eigenvalue problem, `largest` indicates if the problem is a maximum or minimum eigenvalue problem, `X` is the initial eigenbasis, randomly sampled if not input, where `size(X, 2)` is the block size `bs`. `P` is the preconditioner, `nothing` by default, and `C` is the constraints matrix. The desired `k` eigenvalues are found `bs` at a time.
15+
16+
17+
## References
18+
Implementation is based on [^Knyazev1993] and [^Scipy].
19+
20+
[^Knyazev1993]: Andrew V. Knyazev. "Toward the Optimal Preconditioned Eigensolver: Locally Optimal Block Preconditioned Conjugate Gradient Method" SIAM Journal on Scientific Computing, 23(2):517–541 2001.
21+
22+
[^Scipy]: See [Scipy LOBPCG implementation](https://github.com/scipy/scipy/blob/v1.1.0/scipy/sparse/linalg/eigen/lobpcg/lobpcg.py#L109-L568)

0 commit comments

Comments
 (0)