Collaboration diagram for DSPF_dp_cholesky:
Modules | |
DSPF_dp_cholesky_in_place | |
int | DSPF_dp_cholesky (const int enable_test, const int order, double *restrict A, double *restrict L) |
int | DSPF_dp_cholesky_in_place (const int enable_test, const int order, double *restrict A) |
int | DSPF_dp_cholesky_solver (const int order, double *restrict L, double *restrict y, double *restrict b, double *restrict x) |
int DSPF_dp_cholesky | ( | const int | enable_test, | |
const int | order, | |||
double *restrict | A, | |||
double *restrict | L | |||
) |
This function tests the matrix A for a symmetric positive definite and decomposes the matrix A into a lower triangular matrix L where A=L*U and U=transpose of L. The values stored in the matrices are assumed to be double precision floating point values. This code is suitable for dense matrices. No optimizations are made for sparse matrices.
enable_test | = enables test for symmetric positive definite matrix | |
order | = order of matrix A | |
A | = pointer to matrix A | |
L | = pointer to lower triangular matrix L |
int DSPF_dp_cholesky_in_place | ( | const int | enable_test, | |
const int | order, | |||
double *restrict | A | |||
) |
This function tests the matrix A for a symmetric positive definite and decomposes the matrix A into a lower triangular matrix L where A=L*U and U=transpose of L. The processing is done in place of the matrix A. The values stored in the matrices are assumed to be double precision floating point values. This code is suitable for dense matrices. No optimizations are made for sparse matrices.
enable_test | = enables test for symmetric positive definite matrix | |
order | = order of matrix A | |
A | = pointer to input matrix A and output matrix L |
int DSPF_dp_cholesky_solver | ( | const int | order, | |
double *restrict | L, | |||
double *restrict | y, | |||
double *restrict | b, | |||
double *restrict | x | |||
) |
This function solves A*x=b for x using forward and backward substitution using the decomposed lower triangular matrix L as shown in the following steps. The values stored in the matrices are assumed to be double precision floating point values. 1. A*x = L*U*b = L*L_transpose*x = b 2. y = inverse(L)*b - done using forward substitution 3. x = inverse(L_transpose)*y - done using backward substitution
order | = order of matrix A | |
L | = pointer to input matrix | |
y | = pointer to intermediate vector | |
b | = pointer to input vector | |
x | = pointer to output vector |