示例#1
0
        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);
        }
示例#2
0
        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;
                }
            }
        }