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); }