Let $M=(m_{ij})$ be a symmetric matrix of order $n$ whose elements lie in an arbitrary field $mathbb{F}$, and let $G$ be the graph with vertex set ${1,ldots,n}$ such that distinct vertices $i$ and $j$ are adjacent if and only if $m_{ij} eq 0$. We introduce a dynamic programming algorithm that finds a diagonal matrix that is congruent to $M$. If $G$ is given with a tree decomposition $mathcal{T}$ of width $k$, then this can be done in time $O(k|mathcal{T}| + k^2 n)$, where $|mathcal{T}|$ denotes the number of nodes in $mathcal{T}$. Among other things, this allows one to compute the determinant, the rank and the inertia of a symmetric matrix in time $O(k|mathcal{T}| + k^2 n)$.