  Motivated by applications to topological data analysis, we give an efficient
algorithm for computing a (minimal) presentation of a bigraded $K[x,y]$-module
$M$, where $K$ is a field. The algorithm takes as input a short chain complex
of free modules $X\xrightarrow{f} Y \xrightarrow{g} Z$ such that $M\cong
\ker{g}/\mathrm{im}{f}$. It runs in time $O(|X|^3+|Y|^3+|Z|^3)$ and requires
$O(|X|^2+|Y|^2+|Z|^2)$ memory, where $|\cdot |$ denotes the rank. Given the
presentation computed by our algorithm, the bigraded Betti numbers of $M$ are
readily computed. Our approach is based on a simple matrix reduction algorithm,
slight variants of which compute kernels of morphisms between free modules,
minimal generating sets, and Gr\"obner bases. Our algorithm for computing
minimal presentations has been implemented in RIVET, a software tool for the
visualization and analysis of two-parameter persistent homology. In experiments
on topological data analysis problems, our implementation outperforms the
standard computational commutative algebra packages Singular and Macaulay2 by a
wide margin.
