imate
C++/CUDA Reference
|
Go to the source code of this file.
Functions | |
template<typename DataType > | |
IndexType | c_golub_kahn_bidiagonalization (cLinearOperator< DataType > *A, const DataType *v, const LongIndexType n, const IndexType m, const DataType lanczos_tol, const FlagType orthogonalize, DataType *alpha, DataType *beta) |
Bi-diagonalizes the positive-definite matrix A using Golub-Kahn-Lanczos method. More... | |
IndexType c_golub_kahn_bidiagonalization | ( | cLinearOperator< DataType > * | A, |
const DataType * | v, | ||
const LongIndexType | n, | ||
const IndexType | m, | ||
const DataType | lanczos_tol, | ||
const FlagType | orthogonalize, | ||
DataType * | alpha, | ||
DataType * | beta | ||
) |
Bi-diagonalizes the positive-definite matrix A
using Golub-Kahn-Lanczos method.
This method bi-diagonalizes matrix A
to B
using the start vector w
. m
is the Lanczos degree, which will be the size of square matrix B
.
The output of this function are alpha
(of length m
) and beta
(of length m+1
) which are diagonal (alpha
[:]) and off-diagonal (beta
[1:]) elements of the bi-diagonal (m,m) symmetric and positive-definite matrix
B
.
A
is very close to the identity matrix, the Golub-Kahn bi-diagonalization method can not find beta
, as beta
becomes zero. If A
is not exactly identity, you may decrease the Tolerance to a very small number. However, if A
is almost identity matrix, decreasing lanczos_tol
will not help, and this function cannot be used.[in] | A | A linear operator that represents a matrix of size (n,n) and can perform matrix-vector operation with dot() method and transposed matrix-vector operation with transpose_dot() method. This matrix should be positive-definite. |
[in] | v | Start vector for the Lanczos tri-diagonalization. Column vector of size n . It could be generated randomly. Often it is generated by the Rademacher distribution with entries +1 and -1 . |
[in] | n | Size of the square matrix A , which is also the size of the vector v . |
[in] | m | Lanczos degree, which is the number of Lanczos iterations. |
[in] | lanczos_tol | The tolerance of the residual error of the Lanczos iteration. |
[in] | orthogonalize | Indicates whether to orthogonalize the orthogonal eigenvectors during Lanczos recursive iterations.
|
[out] | alpha | This is a 1D array of size m and alpha [:] constitute the diagonal elements of the bi-diagonal matrix B . This is the output and written in place. |
[out] | beta | This is a 1D array of size m , and the elements beta [:] constitute the sup-diagonals of the bi-diagonal matrix B . This array is the output and written in place. |
(m,m), which is the Lanczos degree. However, if the algorithm terminates early, the size of alpha
and beta
, and hence the output tri-diagonal matrix, is smaller. This counter keeps track of the non-zero size of alpha
and beta
. Definition at line 111 of file c_golub_kahn_bidiagonalization.cpp.
References cLinearOperator< DataType >::dot(), cOrthogonalization< DataType >::gram_schmidt_process(), cVectorOperations< DataType >::normalize_vector_and_copy(), cVectorOperations< DataType >::normalize_vector_in_place(), cVectorOperations< DataType >::subtract_scaled_vector(), and cLinearOperator< DataType >::transpose_dot().
Referenced by cTraceEstimator< DataType >::_c_stochastic_lanczos_quadrature().