Beispiel #1
0
        private void buttonNewtonsMethod_Click(object sender, EventArgs e)
        {
            double epsilon;

            if (!double.TryParse(textBoxEpsilonMultidimentional.Text, out epsilon))
            {
                MessageBox.Show("Неверное значение ε!");
                return;
            }

            int error;

            double[] variables;
            if (!TryGetMultidimentionalPoint(out variables, out error))
            {
                MessageBox.Show($"Неверное значение переменной в строке {error}!");
                return;
            }

            MatrixNamespace.Matrix x_0 = new MatrixNamespace.Matrix(variables.Count(), variables);
            Optimizer opt = new Optimizer(parser);
            Tuple <MatrixNamespace.Matrix, double> result;

            try
            {
                result = opt.NewtonsMethod(x_0, epsilon);
            }
            catch (MethodDivergencyException ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
            textBoxMultidimentionalX.Text  = $"{ result.Item1:F5}";
            textBoxMultidimentionalFx.Text = $"{ result.Item2:F5}";
        }
Beispiel #2
0
        private void buttonSingledimantionalNewtonsMethod_Click(object sender, EventArgs e)
        {
            double x, epsilon;

            if (!double.TryParse(textBoxNewtonEpsilon.Text, out epsilon))
            {
                MessageBox.Show("Неверное значение ε!");
                return;
            }

            if (!double.TryParse(textBoxNewtonsX.Text, out x))
            {
                MessageBox.Show("Неверное значение x_0!");
                return;
            }

            if (!CheckRange())
            {
                return;
            }

            BuildGraph(parser.Evaluate, true, a, b, epsilon, 5);

            MatrixNamespace.Matrix x_0 = new MatrixNamespace.Matrix(1, 5);
            x_0[0] = x;
            Optimizer opt    = new Optimizer(parser);
            var       result = opt.NewtonsMethod(x_0, epsilon);

            DrawPoint(result.Item1[0], result.Item2);
            textBoxMin.Text  = $"{ result.Item1[0]:F5}";
            textBoxFmin.Text = $"{ result.Item2:F5}";
        }
Beispiel #3
0
        private void buttonPenaltyMethod_Click(object sender, EventArgs e)
        {
            int error;

            double[] variables;
            if (!TryGetMultidimentionalPoint(out variables, out error))
            {
                MessageBox.Show($"Неверное значение переменной в строке {error}!");
                return;
            }
            MatrixNamespace.Matrix x_0 = new MatrixNamespace.Matrix(variables.Count(), variables);

            double epsilon;

            if (!double.TryParse(textBoxEpsilonMultidimentional.Text, out epsilon))
            {
                MessageBox.Show("Неверное значение ε!");
                return;
            }

            double c;

            if (!double.TryParse(textBoxC.Text, out c))
            {
                MessageBox.Show("Неверное значение c!");
                return;
            }

            FunctionParser penaltyFunc;

            try { penaltyFunc = new FunctionParser(textBoxPenaltyFunc.Text); }
            catch (Exception)
            {
                MessageBox.Show("Не удалось преобразовать строку в функцию, проверьте ввод.");
                return;
            }

            Optimizer opt = new Optimizer(parser);
            Tuple <MatrixNamespace.Matrix, double> result;

            try
            {
                result = opt.PenaltyMethod(x_0, penaltyFunc, epsilon, c);
            }
            catch (MethodDivergencyException ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
            textBoxMultidimentionalX.Text  = $"{ result.Item1:F5}";
            textBoxMultidimentionalFx.Text = $"{ result.Item2:F5}";
        }