@@ -37,20 +37,30 @@ def tridiag_sym(
3737):
3838 r"""Construct an implementation of **tridiagonalisation**.
3939
40- Uses pre-allocation, and full reorthogonalisation if `reortho` is set to `"full"`.
41- It tends to be a good idea to use full reorthogonalisation.
42-
43- This algorithm assumes a **symmetric matrix**.
44-
45- Decompose a matrix into a product of orthogonal-**tridiagonal**-orthogonal matrices.
40+ Decompose a **symmetric** matrix into a product of orthogonal-**tridiagonal**-orthogonal matrices.
4641 Use this algorithm for approximate **eigenvalue** decompositions.
42+ The present implementation allocates all Lanczos vectors before running the
43+ algorithm. If `reortho` is set to `"full"`, it also uses full reorthogonalisation.
44+ It is usually a good idea to use full reorthogonalisation.
45+ Matrix-free tridiagonalisation uses Lanczos' (1950) algorithm:
46+
47+ ??? note "BibTex for Lanczos (1950)"
48+ ```bibtex
49+ @article{lanczos1950iteration,
50+ title={An iteration method for the solution of the eigenvalue problem of linear differential and integral operators},
51+ author={Lanczos, Cornelius},
52+ journal={Journal of research of the National Bureau of Standards},
53+ volume={45},
54+ number={4},
55+ pages={255--282},
56+ year={1950}
57+ }
58+ ```
4759
4860 Setting `custom_vjp` to `True` implies using efficient, numerically stable
49- gradients of the Lanczos iteration according to what has been proposed by
50- Krämer et al. (2024).
61+ gradients of the Lanczos iteration which was proposed by Krämer et al. (2024).
5162 These gradients are exact, so there is little reason not to use them.
52- If you use this configuration, please consider
53- citing Krämer et al. (2024; bibtex below).
63+ If you use this configuration, please cite Krämer et al. (2024):
5464
5565 ??? note "BibTex for Krämer et al. (2024)"
5666 ```bibtex
@@ -602,9 +612,10 @@ def bidiag(num_matvecs: int, /, materialize: bool = True, reortho: str = "full")
602612 ??? note "A note about differentiability"
603613 Unlike [tridiag_sym][matfree.decomp.tridiag_sym] or
604614 [hessenberg][matfree.decomp.hessenberg], this function's reverse-mode
605- derivatives are very efficient. Custom gradients for bidiagonalisation
606- are a work in progress, and if you need to differentiate the decompositions,
607- consider using [tridiag_sym][matfree.decomp.tridiag_sym] for the time being.
615+ derivatives are not efficient. Custom gradients for bidiagonalisation
616+ are a work in progress. In the meantime,
617+ if you need to differentiate the decompositions, consider using
618+ [tridiag_sym][matfree.decomp.tridiag_sym] instead (if possible).
608619
609620 """
610621
0 commit comments