L = ichol(A)
L = ichol(A, opts)
| Parameter | Description |
|---|---|
| A | a sparse real symmetric or complex Hermitian floating-point square matrix. |
| opts | a scalar structure with optional fields type, droptol, diagcomp, michol, and shape. |
| Parameter | Description |
|---|---|
| L | sparse lower or upper triangular incomplete Cholesky factor. |
ichol computes a sparse lower triangular factor L suitable for use as a preconditioner.
The input matrix should be symmetric positive definite for real data or Hermitian positive definite for complex data.
opts.type can be 'nofill' or 'ict'. The default is 'nofill'.
opts.droptol is a non-negative scalar used by the 'ict' mode. The default is 0. Entries whose magnitude is below the drop tolerance relative to the column scale are removed from the incomplete factor.
opts.diagcomp applies a relative diagonal compensation before factorization. This can make borderline positive definite or difficult Hermitian matrices usable as preconditioners without changing the sparse input matrix.
opts.michol can be 'on' or 'off'. In 'ict' mode, the modified variant moves dropped structural entries onto the diagonal so row sums are better preserved.
opts.shape can be 'lower' or 'upper'. The default is 'lower'.
Text option values such as opts.type, opts.michol, and opts.shape can be character row vectors or string scalars.
Double, single, complex double, and complex single sparse matrices are supported. The output factor keeps the input numeric class.
The factor can be used directly as a preconditioner for pcg, for example pcg(A, b, tol, maxit, L, L').
A = sparse([4 -1 0; -1 4 -1; 0 -1 3]);
L = ichol(A)
full(L * L')
A = sparse([4 -1 0; -1 4 -1; 0 -1 3]);
opts.type = 'ict';
opts.droptol = 0.6;
L = ichol(A, opts)
A = sparse([4 -1 0; -1 4 -1; 0 -1 3]);
opts.shape = 'upper';
R = ichol(A, opts)
A = sparse(single([4 1 + 1i; 1 - 1i 3]));
opts.type = 'ict';
opts.droptol = 0;
L = ichol(A, opts)
b = single([1 + 2i; 3 - 1i]);
[x, flag] = pcg(A, b, 1e-6, 20, L, L')
A = sparse([1 2 + 1i; 2 - 1i 1]);
opts.diagcomp = 3;
L = ichol(A, opts);
full(L * L')
| Version | Description |
|---|---|
| 2.0.0 | initial version |
| 2.0.0 | added single and complex single ict, diagcomp, shape, string scalar options, and preconditioner coverage |