예제 #1
0
파일: lab3.cs 프로젝트: jtoming830/Dmitr
        public static Point Svenn(Point x0, Point p1)
        {
            double A1 = 0, A2 = 0;

            A2 = A1 + ah;
            if (AlphaMove.y(A2, p1, x0) > AlphaMove.y(A1, p1, x0))
            {
                ah = -ah;
                A2 = A1 + ah;
            }
            for (int k = 0; k < M1; k++)
            {
                if (AlphaMove.dy(A1, p1, x0) * AlphaMove.dy(A2, p1, x0) <= 0)
                {
                    break;
                }
                ah *= 2;
                A1  = A2;
                A2  = A1 + ah;
            }
            if (A2 < A1)
            {
                Console.Write("Swapped ");
                double buf = A1;
                A1 = A2;
                A2 = buf;
            }
            Console.WriteLine("SvennLog: " + A1 + " to " + A2);
            return(new Point(A1, A2));
        }
예제 #2
0
파일: lab3.cs 프로젝트: jtoming830/Dmitr
        //ЗС2
        static double GS2(Point interval, Point x0, Point p1)
        {
            double A1 = interval.X, A2 = interval.Y, a = A1, b = A2, L;

            for (int k = 0; k < M2; k++)
            {
                L  = Math.Abs(b - a);
                A1 = a + T2 * L;
                A2 = a + b - A1;
                if (AlphaMove.y(A1, p1, x0) > AlphaMove.y(A2, p1, x0))
                {
                    if (A1 > A2)
                    {
                        b  = A1;
                        A1 = A2;
                    }
                    else
                    {
                        a  = A1;
                        A1 = A2;
                    }
                }
                else
                {
                    if (A1 > A2)
                    {
                        a = A2;
                    }
                    else
                    {
                        b = A2;
                    }
                }
                if (Math.Abs(a - b) < Eps)
                {
                    return((b + a) / 2);
                }
            }
            return((b + a) / 2);
        }