In numerical linear algebra, the Arnoldi iteration is an eigenvalue algorithm and an important example of an iterative method. Arnoldi finds an approximation to the eigenvalues and eigenvectors of general (possibly non-Hermitian) matrices by constructing an orthonormal basis of the Krylov subspace, which makes it particularly useful when dealing with large sparse matrices. The Arnoldi method belongs to a class of linear algebra algorithms that give a partial result after a small number of iterations, in contrast to so-called direct methods which must complete to give any useful results (see for example, Householder transformation). The partial result in this case being the first few vectors of the basis the algorithm is building. When applied to Hermitian matrices it reduces to the Lanczos algorithm. The Arnoldi iteration was invented by W. E. Arnoldi in 1951. Krylov subspaces and the power iteration An intuitive method for finding the largest (in absolute value) eigenvalue of a given m × m matrix is the power iteration: starting with an arbitrary initial vector b, calculate normalizing the result after every application of the matrix A. This sequence converges to the eigenvector corresponding to the eigenvalue with the largest absolute value, . However, much potentially useful computation is wasted by using only the final result, . This suggests that instead, we form the so-called Krylov matrix: The columns of this matrix are not in general orthogonal, but we can extract an orthogonal basis, via a method such as Gram–Schmidt orthogonalization. The resulting set of vectors is thus an orthogonal basis of the Krylov subspace, . We may expect the vectors of this basis to span good approximations of the eigenvectors corresponding to the largest eigenvalues, for the same reason that approximates the dominant eigenvector. The Arnoldi iteration The Arnoldi iteration uses the modified Gram–Schmidt process to produce a sequence of orthonormal vectors, q1, q2, q3, ..., called the Arnoldi vectors, such that for every n, the vectors q1, ..., qn span the Krylov subspace . Explicitly, the algorithm is as follows: Start with an arbitrary vector q1 with norm 1. Repeat for k = 2, 3, ... qk := A qk−1 for j from 1 to k − 1 hj,k−1 := qj* qk qk := qk − hj,k−1 qj hk,k−1 := ||qk|| qk := qk / hk,k−1 The j-loop projects out the component of in the directions of . This ensures the orthogonality of all the