private Vector Solve()
        {
            mF = func.ScalarMultiply(func);
            Sz = (mas.MultiplyColumnLeft(Xk)).ConvertToVector();
            Rk = func - Sz;
            Zk = _vectorFactory.CreateVector(Rk);


            do
            {
                Spz = 0;
                Spr = 0;
                Sz  = _vectorFactory.CreateVector(Size);
                Sz  = mas.MultiplyColumnLeft(Zk).ConvertToVector();
                Spz = Sz.ScalarMultiply(Zk);
                Spr = Rk.ScalarMultiply(Rk);

                alf  = Spr / Spz;
                Spr1 = 0;
                Xk   = (alf * Zk) + Xk;
                Rk   = Rk - alf * Sz;
                Spr1 = Rk.ScalarMultiply(Rk);
                bet  = Spr1 / Spr;

                Zk = Rk + bet * Zk;
            }while (Spr1 / mF > EPS);

            return(Xk);
        }
        private Vector Solve()
        {
            mF = func.ScalarMultiply(func);
            Sz = (mas.MultiplyColumnLeft(Xk)).ConvertToVector();
            Rk = func - Sz;
            Zk = _vectorFactory.CreateVector(Rk);


            do
            {
                Spz = 0;
                Spr = 0;
                Sz  = _vectorFactory.CreateVector(Size);
                Sz  = mas.MultiplyColumnLeft(Zk).ConvertToVector();
                Spz = Sz.ScalarMultiply(Zk);
                Spr = Rk.ScalarMultiply(Rk);

                alf  = Spr / Spz;
                Spr1 = 0;

                Xk = (alf * Zk) + Xk;
                Rk = Rk - alf * Sz;

                for (int i = 0; i < Size; i++)
                {
                    if (i > 0)
                    {
                        Rr = Rk[i] - Rk[i - 1];
                    }
                    else
                    {
                        Rr = 0;
                    }
                    Spr1 += Rk[i] * Rr;
                }
                bet = Spr1 / Spr;

                Zk = Rk + bet * Zk;
            }while (Spr1 / mF > EPS);

            return(Xk);
        }