conjugate gradients methods