/// <summary> /// Constructs a new Cholesky Decomposition. /// </summary> /// /// <param name="value"> /// The symmetric matrix, given in upper triangular form, to be decomposed.</param> /// <param name="robust"> /// True to perform a square-root free LDLt decomposition, false otherwise.</param> /// <param name="inPlace"> /// True to perform the decomposition in place, storing the factorization in the /// lower triangular part of the given matrix.</param> /// <param name="valueType"> /// How to interpret the matrix given to be decomposed. Using this parameter, a lower or /// upper-triangular matrix can be interpreted as a symmetric matrix by assuming both lower /// and upper parts contain the same elements. Use this parameter in conjunction with inPlace /// to save memory by storing the original matrix and its decomposition at the same memory /// location (lower part will contain the decomposition's L matrix, upper part will contains /// the original matrix).</param> /// public CholeskyDecompositionF(Single[,] value, bool robust = false, bool inPlace = false, MatrixType valueType = MatrixType.UpperTriangular) { if (value.Rows() != value.Columns()) { throw new DimensionMismatchException("value", "Matrix is not square."); } if (!inPlace) { value = value.Copy(); } this.n = value.Rows(); this.L = value.ToUpperTriangular(valueType, result: value); this.robust = robust; if (robust) { LDLt(); // Compute square-root free decomposition } else { LLt(); // Compute standard Cholesky decomposition } }