In each iteration of the nonlinear optimization process, the traveltimes, gradient vector, and conjugate gradient vector need to be computed. The conventional method does these computations through ray tracing. After finding the ray trajectories, one integrates the slowness function along the rays to get traveltimes, spreads the traveltime residuals along the rays to compute the gradient vector, and integrates the gradient function along rays to compute the conjugate gradient vector. In this section, I describe a method that does these computations with the finite difference technique.