private void методПокоординатногоСпускуМетодомЗейделяГаусаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FunctionWrapper.Function firstFunction =
                x => 40 * Math.Pow(x[0], 2) + 20 * x[0] * x[1] + 30 * Math.Pow(x[1], 2) - 10 * x[0] + x[1];

            var firstCounter         = new FunctionCallsCounter(firstFunction);
            var x0ForFirstFunction   = new Point(0, 2);
            var firstFunctionWrapper = new FunctionWrapper(firstCounter.GetFunction(),
                                                           x => new Vector(80 * x[0] + 20 * x[1] - 10, 20 * x[0] + 60 * x[1] + 1));
            var epsilon = Convert.ToDouble(comboBox1.Text);
            var res     = CoordinateDescent(firstFunctionWrapper, x0ForFirstFunction, h0, epsilon);

            textBox1.Text = res.ToString();
            textBox2.Text = firstFunctionWrapper.Eval(res).ToString();
            textBox3.Text = firstCounter.Count.ToString();
            textBox4.Text = _loopCounter.ToString();
        }
        private void методНайшвидшогоСпускуToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            //функцiя Розенброка
            FunctionWrapper.Function RozenbrocksFunction =
                x => 100 * Math.Pow(x[1] - Math.Pow(x[0], 2), 2) + Math.Pow(1 - x[0], 2);
            var rozenblocksCounter         = new FunctionCallsCounter(RozenbrocksFunction);
            var rozenblocksFunctionWrapper = new FunctionWrapper(rozenblocksCounter.GetFunction(),
                                                                 x => new Vector(400 * Math.Pow(x[0], 3) - 400 * x[0] * x[1] + 2 * x[0] - 2,
                                                                                 200 * x[1] - 200 * Math.Pow(x[0], 2)));
            var x0ForRozenboksFunction = new Point(0, 0);
            var epsilon = Convert.ToDouble(comboBox1.Text);

            rozenblocksCounter.Count = 0;
            _loopCounter             = 0;
            var res = FastestDescent(rozenblocksFunctionWrapper, x0ForRozenboksFunction, h0, epsilon);

            textBox1.Text = res.ToString();
            textBox2.Text = rozenblocksFunctionWrapper.Eval(res).ToString();
            textBox3.Text = rozenblocksCounter.Count.ToString();
            textBox4.Text = _loopCounter.ToString();
        }
        private void узагальненийМетодНьютонаДляПошукуДругоїФункціїToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FunctionWrapper.Function secondFunction =
                x =>
                Math.Pow(x[0], 4) + 3 * Math.Pow(x[1], 4) +
                Math.Sqrt(2 * Math.Pow(x[0], 2) + Math.Pow(x[1], 2) + 1) -
                4 * x[0] + 6 * x[1];
            var secondCounter         = new FunctionCallsCounter(secondFunction);
            var secondFunctionWrapper = new FunctionWrapper(secondCounter.GetFunction(),
                                                            x =>
                                                            new Vector(4 * Math.Pow(x[0], 3) + 2 * x[0] / Math.Sqrt(2 * Math.Pow(x[0], 2) + x[1] + 1) - 4,
                                                                       x[1] / Math.Sqrt(2 * Math.Pow(x[0], 2) + Math.Pow(x[1], 2) + 1) + 12 * Math.Pow(x[1], 3) + 6),
                                                            x => new SquareMatrix(new double[2][]
            {
                new double[2]
                {
                    2 * (6 * Math.Pow(x[0], 2) * Math.Pow(2 * Math.Pow(x[0], 2) + x[1] + 1, 1.5) + x[1] + 1) /
                    Math.Pow(2 * Math.Pow(x[0], 2) + x[1] + 1, 1.5),
                    -(x[0] / Math.Pow(Math.Pow(x[0], 2) + x[1] + 1, 1.5))
                },
                new double[2]
                {
                    -(2 * x[0] * x[1] / Math.Pow(2 * Math.Pow(x[0], 2) + Math.Pow(x[1], 2) + 1, 1.5)),
                    (2 * Math.Pow(x[0], 2) + 1) / Math.Pow(2 * Math.Pow(x[0], 2) + Math.Pow(x[1], 2) + 1, 1.5) +
                    36 * Math.Pow(x[1], 2)
                }
            }));
            var x0ForSecondFunction = new Point(1, 1);

            secondCounter.Count = 0;
            _loopCounter        = 0;
            var epsilon = Convert.ToDouble(comboBox1.Text);
            var res     = GeneralizedNewtonMethod(secondFunctionWrapper, x0ForSecondFunction, h0, epsilon);

            textBox1.Text = res.ToString();
            textBox2.Text = secondFunctionWrapper.Eval(res).ToString();
            textBox3.Text = secondCounter.Count.ToString();
            textBox4.Text = _loopCounter.ToString();
        }
 public FunctionCallsCounter(FunctionWrapper.Function functionToCall)
 {
     Count           = 0;
     _functionToCall = functionToCall;
 }