Numerical analysis : a programming approach