function [count, h, parent, post, L] = symbfact2 (A, mode, Lmode) %#ok %SYMBFACT2 symbolic factorization % % Analyzes the Cholesky factorization of A, A'*A, or A*A'. % % Example: % count = symbfact2 (A) returns row counts of R=chol(A) % count = symbfact2 (A,'col') returns row counts of R=chol(A'*A) % count = symbfact2 (A,'sym') same as symbfact2(A) % count = symbfact2 (A,'lo') same as symbfact2(A'), uses tril(A) % count = symbfact2 (A,'row') returns row counts of R=chol(A*A') % % The flop count for a subsequent LL' factorization is sum(count.^2) % % [count, h, parent, post, R] = symbfact2 (...) returns: % % h: height of the elimination tree % parent: the elimination tree itself % post: postordering of the elimination tree % R: a 0-1 matrix whose structure is that of chol(A) for the % symmetric case, chol(A'*A) for the 'col' case, or chol(A*A') % for the 'row' case. % % symbfact2(A) and symbfact2(A,'sym') uses the upper triangular part of A % (triu(A)) and assumes the lower triangular part is the transpose of the % upper triangular part. symbfact2(A,'lo') uses tril(A) instead. % % With one to four output arguments, symbfact2 takes time almost % proportional to nnz(A)+n where n is the dimension of R, and memory % proportional to nnz(A). Computing the 5th argument takes more time and % memory, both O(nnz(L)). Internally, the pattern of L is computed and % R=L' is returned. % % The following forms return L = R' instead of R. They are faster and % take less memory than the forms above. They return the same count, h, % parent, and post outputs. % % [count, h, parent, post, L] = symbfact2 (A,'col','L') % [count, h, parent, post, L] = symbfact2 (A,'sym','L') % [count, h, parent, post, L] = symbfact2 (A,'lo', 'L') % [count, h, parent, post, L] = symbfact2 (A,'row','L') % % See also chol, etree, treelayout, symbfact. % Copyright 2006-2023, Timothy A. Davis, All Rights Reserved. % SPDX-License-Identifier: GPL-2.0+ error ('symbfact2 mexFunction not found!') ;