solving non linear equations