An algorithm for least squares analysis of spectroscopic data