public void Calculate(double[] x, int flag = 1, double eps = 0.01) { AxeEffect.pf.Flag = flag; F = AxeEffect.pf.F; Eps = eps; Min = Descend(x); }
public void Calculate(double[] x0, int flag = 2, double eps = 0.001) { AxeEffect.pf.Flag = flag; F = AxeEffect.pf.F; Eps = eps; N = x0.Length; List <Vector> dVectors = new List <Vector>(); Vector x = new Vector(x0); for (int i = 0; i < N; i++) { double[] t = new double[N]; for (int j = 0; j < N; j++) { if (i != j) { t[j] = 0; } else { t[j] = 1; } } dVectors.Add(new Vector(t)); } List <double> lambdas = new List <double>(); for (int k = 0; ; k++) { // Console.WriteLine("k=" + k); lambdas.Clear(); for (int j = 0; j < N; j++) { lambdas.Add(Research(ref x, dVectors[j])); } // Console.WriteLine("fd"+(x- new Vector(x0))); // Console.WriteLine("fd"); // Console.WriteLine(lambdas[0] + " " + lambdas[1] + " " + lambdas[2]); //Console.WriteLine(""); // Console.WriteLine(); // Console.WriteLine(lambdas[0]*dVectors[0] + " " + lambdas[1] * dVectors[1]); dVectors = Gramm(dVectors, lambdas); //foreach (var i in dVectors) // Console.WriteLine(i); //Console.WriteLine(); // Console.WriteLine(x); //Console.WriteLine(); if ((lambdas.Select(e => Math.Abs(e))).Sum() < eps || k > 100) { VMin = x; Min = F(x); break; } } }