//Функция для высчитывания новой точки Coord newPoint(Coord x1, Coord x2, opt OptBeta) { opt Beta = OptBeta; Grad = Coord.Gradient(y, x2, amountVar); //Если k = 1, n+1, 2n+1... if (k % amountVar == 1) { p = -Grad; } else { double beta = Beta(x2, x1); p = -Grad + (beta * p); } //Запускаем линейный поиск p = p / p.Norma; LinearSearch f1 = new LinearSearch(x2, p, y); f1.Svenn(20); f1.Bolcano(20); f1.Davidon(); alfa = f1.alfa_min; p = p / p.Norma; Coord x3 = x2 + alfa * p; return(x3); }
Coord newPointGZ(Coord x) { int length = x.coord.Length; double[] arr_p = new double[length]; Coord p = new Coord(arr_p); points = points % amountVar; p.coord[points] = Func.diff_4(y, x, points); p = p / p.Norma; LinearSearch f1 = new LinearSearch(x, p, y); f1.Svenn5(); f1.Bolcano(5); f1.Davidon(); alfa = f1.alfa_min; Coord x_2 = x + alfa * p; points++; return(x_2); }