LetM1 = (E, 91),M2 = (E, 92) be two matroids over the same set of elementsE, and with families of independent sets 91, 92. A setI ∈ 91 ∩ 92 is said to be anintersection of the matroidsM1,M2. An important problem of combinatorial optimization is that of finding an optimal intersection ofM1,M2. In this paper three matroid intersection algorithms are presented. One algorithm computes an intersection containing a maximum number of elements. The other two algorithms compute intersections which are of maximum total weight, for a given weighting of the elements inE. One of these algorithms is “primal-dual”, being based on duality considerations of linear programming, and the other is “primal”. All three algorithms are based on the computation of an “augmenting sequence” of elements, a generalization of the notion of an augmenting path from network flow theory and matching theory. The running time of each algorithm is polynomial inm, the number of elements inE, and in the running times of subroutines for independence testing inM1,M2. The algorithms provide constructive proofs of various important theorems of matroid theory, such as the Matroid Intersection Duality Theorem and Edmonds' Matroid Polyhedral Intersection Theorem.