|
1 | | -WORK IN PROGRESS |
| 1 | +WORK IN PROGRESS |
| 2 | + |
| 3 | +``FastLapackInterface`` separates workspace allocation and actual |
| 4 | +running for some Lapack algorithms: |
| 5 | + |
| 6 | + - LU factorization |
| 7 | + - QR factorization |
| 8 | + - Schur factorization |
| 9 | + |
| 10 | +### LU factorization and linear problem solution |
| 11 | + |
| 12 | + - ``ws = LinSolveWs(n)`` creates storage for a linear problem with `n` |
| 13 | + equations. |
| 14 | + - ``lu!(A, ws)`` computes the LU factorization and stores it in |
| 15 | + ``ws`` |
| 16 | + - ``linsolve_core!(A, b, ws)`` computes LU factorization for matrix |
| 17 | + `A` and returns the solution of `Ax=b` in `b`. |
| 18 | + - ``linsolve_core_no_lu!(A, b, ws)`` computes the solution of `Ax=b` |
| 19 | + and returns it in `b` by using the LU decomposition of `A` already |
| 20 | + stored in `ws`. |
| 21 | + |
| 22 | +### QR factorization ( A = Q*R) |
| 23 | + |
| 24 | +- `ws = QrWs(A)` allocates workspace for QR factorization of |
| 25 | + a matrix similar to `A` |
| 26 | +- `geqrf_core!(A, ws)` computes QR factorization of matrix `A` and |
| 27 | + stores it in `A` and `ws.tau` |
| 28 | +- `ormqr_core!(side, A, C, ws)` computes `Q*C` (`side='L'`) or `C*Q` |
| 29 | + (`side='R'`) |
| 30 | +- `ormqr_core!(side, transpose(A), C, ws)` computes `transpose(Q)*C` |
| 31 | + (`side='L'`) or `C*transpose(Q)` (`side='R'`) |
| 32 | + |
| 33 | +### Schur factorization |
| 34 | + |
| 35 | +- `DgeesWs(n)` allocates workspace for the real Schur decomposition of |
| 36 | + a matrix of order `n` |
| 37 | +- `DgeesWs(A)` allocates workspace for the real Schur decomposition of |
| 38 | + a matrix similar to `A` |
| 39 | +- `dgees!(ws, A)` computes the Schur decomposition and stores it in |
| 40 | + `A`. The Schur vectors are stored in `ws.vs` and the eigenvalues in |
| 41 | + `ws.eigen_values`. The Schur decomposition is ordered so that |
| 42 | + eigenvalues larger than 1+1e-6 in modulus are ordered first. |
| 43 | +- `dgees!(ws, A, op, crit)` computes the Schur decomposition and stores it in |
| 44 | + `A`. The Schur vectors are stored in `ws.vs` and the eigenvalues in |
| 45 | + `ws.eigen_values`. The Schur decomposition is ordered according to `λ op crit` |
| 46 | + where `op` can be `<`, `<=`, `>` or `>=`. |
| 47 | +- `DggesWs(A, B)` allocates workspace for the real generalized Schur decomposition of |
| 48 | + a matrices similar to `A` and `B` |
| 49 | +- `dgges!(jobvsl, jobvsr, A, B, vsl, vsr, eigval, ws)` |
| 50 | + computes the generalized Schur decomposition and stores it in |
| 51 | + `A` and `B`. When `jobvsl` is 'V', the left Schur vectors are stored in `vsl`. |
| 52 | + When `jobvsr` is 'V', the right Schur vectors are stored in `vsr`. |
| 53 | + The eigenvalues are stored in `eigval`. The Schur decomposition is ordered so that |
| 54 | + eigenvalues larger than 1+1e-6 in modulus are ordered first. |
| 55 | + |
| 56 | +## Package version |
| 57 | +- v0.1.3: works only with Julia >= 1.7 |
| 58 | + |
| 59 | +## TODO |
| 60 | + - homogenize API to the various functions |
0 commit comments