\HeaderA{dsCMatrix-class}{Numeric Symmetric Sparse (column compressed) Matrices}{dsCMatrix.Rdash.class}
\aliasA{Arith,dsCMatrix,dsCMatrix-method}{dsCMatrix-class}{Arith,dsCMatrix,dsCMatrix.Rdash.method}
\aliasA{coerce,dgeMatrix,dsCMatrix-method}{dsCMatrix-class}{coerce,dgeMatrix,dsCMatrix.Rdash.method}
\aliasA{coerce,dgeMatrix,dsTMatrix-method}{dsCMatrix-class}{coerce,dgeMatrix,dsTMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,dgCMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,dgCMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,dgeMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,dgeMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,dgTMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,dgTMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,dsRMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,dsRMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,dsTMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,dsTMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,dsyMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,dsyMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,generalMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,generalMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,lsCMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,lsCMatrix.Rdash.method}
\aliasA{coerce,dsCMatrix,matrix-method}{dsCMatrix-class}{coerce,dsCMatrix,matrix.Rdash.method}
\aliasA{coerce,dsCMatrix,nsCMatrix-method}{dsCMatrix-class}{coerce,dsCMatrix,nsCMatrix.Rdash.method}
\aliasA{coerce,dsTMatrix,dgeMatrix-method}{dsCMatrix-class}{coerce,dsTMatrix,dgeMatrix.Rdash.method}
\aliasA{coerce,dsTMatrix,dgTMatrix-method}{dsCMatrix-class}{coerce,dsTMatrix,dgTMatrix.Rdash.method}
\aliasA{coerce,dsTMatrix,dsCMatrix-method}{dsCMatrix-class}{coerce,dsTMatrix,dsCMatrix.Rdash.method}
\aliasA{coerce,dsTMatrix,dsyMatrix-method}{dsCMatrix-class}{coerce,dsTMatrix,dsyMatrix.Rdash.method}
\aliasA{coerce,dsTMatrix,lsTMatrix-method}{dsCMatrix-class}{coerce,dsTMatrix,lsTMatrix.Rdash.method}
\aliasA{coerce,dsTMatrix,matrix-method}{dsCMatrix-class}{coerce,dsTMatrix,matrix.Rdash.method}
\aliasA{coerce,dsyMatrix,dsCMatrix-method}{dsCMatrix-class}{coerce,dsyMatrix,dsCMatrix.Rdash.method}
\aliasA{coerce,dsyMatrix,dsTMatrix-method}{dsCMatrix-class}{coerce,dsyMatrix,dsTMatrix.Rdash.method}
\aliasA{coerce,dtCMatrix,dtRMatrix-method}{dsCMatrix-class}{coerce,dtCMatrix,dtRMatrix.Rdash.method}
\aliasA{coerce,graphNEL,dsCMatrix-method}{dsCMatrix-class}{coerce,graphNEL,dsCMatrix.Rdash.method}
\aliasA{coerce,matrix,dsCMatrix-method}{dsCMatrix-class}{coerce,matrix,dsCMatrix.Rdash.method}
\aliasA{coerce,matrix,dsTMatrix-method}{dsCMatrix-class}{coerce,matrix,dsTMatrix.Rdash.method}
\aliasA{determinant,dsCMatrix,logical-method}{dsCMatrix-class}{determinant,dsCMatrix,logical.Rdash.method}
\aliasA{determinant,dsCMatrix,missing-method}{dsCMatrix-class}{determinant,dsCMatrix,missing.Rdash.method}
\aliasA{dsTMatrix-class}{dsCMatrix-class}{dsTMatrix.Rdash.class}
\aliasA{solve,dsCMatrix,ddenseMatrix-method}{dsCMatrix-class}{solve,dsCMatrix,ddenseMatrix.Rdash.method}
\aliasA{solve,dsCMatrix,denseMatrix-method}{dsCMatrix-class}{solve,dsCMatrix,denseMatrix.Rdash.method}
\aliasA{solve,dsCMatrix,dsparseMatrix-method}{dsCMatrix-class}{solve,dsCMatrix,dsparseMatrix.Rdash.method}
\aliasA{solve,dsCMatrix,matrix-method}{dsCMatrix-class}{solve,dsCMatrix,matrix.Rdash.method}
\aliasA{solve,dsCMatrix,numeric-method}{dsCMatrix-class}{solve,dsCMatrix,numeric.Rdash.method}
\aliasA{t,dsCMatrix-method}{dsCMatrix-class}{t,dsCMatrix.Rdash.method}
\aliasA{t,dsTMatrix-method}{dsCMatrix-class}{t,dsTMatrix.Rdash.method}
\keyword{classes}{dsCMatrix-class}
\keyword{algebra}{dsCMatrix-class}
\begin{Description}\relax
The \code{dsCMatrix} class is a class of symmetric, sparse
numeric matrices in the compressed, column-oriented format.  In this
implementation the non-zero elements in the columns are sorted into
increasing row order.\\
The \code{dsTMatrix} class is the class of
symmetric, sparse numeric matrices in triplet format.
\end{Description}
\begin{Section}{Objects from the Class}
Objects can be created by calls of the form \code{new("dsCMatrix",
    ...)} or \code{new("dsTMatrix", ...)} or (for \code{dsCMatrix}) also
automatically from \code{\LinkA{Matrix}{Matrix}(.)}.
\end{Section}
\begin{Section}{Slots}
\describe{
\item[\code{uplo}:] A character object indicating if the upper
triangle (\code{"U"}) or the lower triangle (\code{"L"}) is stored.
\item[\code{i}:] Object of class \code{"integer"} of length nnZ
(\emph{half} number of non-zero elements).  These are the row
numbers for each non-zero element in the lower triangle of the matrix.
\item[\code{p}:] (only in class \code{"dsCMatrix"}:) Object of class
\code{"integer"} of pointers, one for each column, to the initial
(zero-based) index of elements in the column.
\item[\code{j}:] (only in class \code{"dsTMatrix"}:) Object of
class \code{"integer"} of length nnZ (as \code{i}).  These are the
column numbers for each non-zero element in the lower triangle of
the matrix.
\item[\code{x}:] Object of class \code{"numeric"} of length nnZ --
the non-zero elements of the matrix (to be duplicated for full matrix).
\item[\code{factors}:] Object of class \code{"list"} - a list
of factorizations of the matrix. 
\item[\code{Dim}:] Object of class \code{"integer"} - the dimensions
of the matrix - must be an integer vector with exactly two
non-negative values.
}
\end{Section}
\begin{Section}{Extends}
Both classes extend classes and \code{\LinkA{symmetricMatrix}{symmetricMatrix.Rdash.class}}
\code{\LinkA{dsparseMatrix}{dsparseMatrix.Rdash.class}} directly;
\code{dsCMatrix} further directly extends
\code{\LinkA{CsparseMatrix}{CsparseMatrix.Rdash.class}}, where
\code{dsTMatrix} does \code{\LinkA{TsparseMatrix}{TsparseMatrix.Rdash.class}}.
\end{Section}
\begin{Section}{Methods}
\describe{
\item[solve] \code{signature(a = "dsCMatrix", b = "dsparseMatrix")}: Solve
a linear system of equations defined by \code{x} using a Cholesky
decomposition.  All steps will be based on \emph{sparse}
representations.
\item[solve] \code{signature(a = "dsCMatrix", b = "matrix")}: Solve
a linear system of equations defined by \code{x} using a Cholesky
decomposition.
\item[chol] \code{signature(x = "dsCMatrix", pivot = "logical")}:
Returns (and stores) the Cholesky decomposition of \code{x}, see
\code{\LinkA{chol}{chol}}.
\item[Cholesky] \code{signature(A = "dsCMatrix",...)}:
Computes more flexibly Cholesky decompositions,
see \code{\LinkA{Cholesky}{Cholesky}}.
\item[determinant] \code{signature(x = "dsCMatrix", logarithm =
        "missing")}: Evaluate the determinant of \code{x} on the
logarithm scale.  This creates and stores the Cholesky factorization.
\item[determinant] \code{signature(x = "dsCMatrix", logarithm =
        "logical")}: Evaluate the determinant of \code{x} on the
logarithm scale or not, according to the \code{logarithm}
argument.  This creates and stores the Cholesky factorization.
\item[t] \code{signature(x = "dsCMatrix")}: Transpose.  As for all
symmetric matrices, a matrix for which the upper triangle is
stored produces a matrix for which the lower triangle is stored
and vice versa, i.e., the \code{uplo} slot is swapped, and the row
and column indices are interchanged.
\item[t] \code{signature(x = "dsTMatrix")}: Transpose.  The
\code{uplo} slot is swapped from \code{"U"} to \code{"L"} or vice
versa, as for a \code{"dsCMatrix"}, see above.
\item[coerce] \code{signature(from = "dsCMatrix", to = "dgTMatrix")}
\item[coerce] \code{signature(from = "dsCMatrix", to = "dgeMatrix")}
\item[coerce] \code{signature(from = "dsCMatrix", to = "matrix")}
\item[coerce] \code{signature(from = "dsTMatrix", to = "dgeMatrix")}
\item[coerce] \code{signature(from = "dsTMatrix", to = "dsCMatrix")}
\item[coerce] \code{signature(from = "dsTMatrix", to = "dsyMatrix")}
\item[coerce] \code{signature(from = "dsTMatrix", to = "matrix")}
}
\end{Section}
\begin{SeeAlso}\relax
Classes \code{\LinkA{dgCMatrix}{dgCMatrix.Rdash.class}}, \code{\LinkA{dgTMatrix}{dgTMatrix.Rdash.class}},
\code{\LinkA{dgeMatrix}{dgeMatrix.Rdash.class}} and those mentioned above.
\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
mm <- Matrix(toeplitz(c(10, 0, 1, 0, 3)), sparse = TRUE)
mm # automatically dsCMatrix
str(mm)

## how would we go from a manually constructed Tsparse* :
mT <- as(mm, "dgTMatrix")

## Either
(symM <- as(mT, "symmetricMatrix"))# dsT
(symC <- as(symM, "CsparseMatrix"))# dsC
## or
sC <- Matrix(mT, sparse=TRUE, forceCheck=TRUE)

sym2 <- as(symC, "TsparseMatrix")

\end{ExampleCode}
\end{Examples}

