Пример #1
0
        private void Button2_Click(object sender, EventArgs e)
        {
            double xmin;
            double xmax;
            bool   is_double1 = double.TryParse(textBox1.Text, out xmin);
            bool   is_double2 = double.TryParse(textBox2.Text, out xmax);

            if (is_double1 && is_double2)
            {
                График_Функции график_Функции = new График_Функции();
                GraphPane      pane           = график_Функции.zedGraphControl1.GraphPane;
                pane.CurveList.Clear();

                // Создадим список точек
                PointPairList list = new PointPairList();
                for (double x = xmin; x <= xmax; x += 0.00001)
                {
                    // добавим в список точку
                    list.Add(x, FunctionsApp.f(x));
                }
                LineItem myCurve = pane.AddCurve("f(x)", list, Color.Blue, SymbolType.None);
                pane.XAxis.MajorGrid.IsVisible = true;

                // Задаем вид пунктирной линии для крупных рисок по оси X:
                // Длина штрихов равна 10 пикселям, ...
                pane.XAxis.MajorGrid.DashOn = 10;

                // затем 5 пикселей - пропуск
                pane.XAxis.MajorGrid.DashOff = 5;


                // Включаем отображение сетки напротив крупных рисок по оси Y
                pane.YAxis.MajorGrid.IsVisible = true;

                // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
                pane.YAxis.MajorGrid.DashOn  = 10;
                pane.YAxis.MajorGrid.DashOff = 5;


                // Включаем отображение сетки напротив мелких рисок по оси X
                pane.YAxis.MinorGrid.IsVisible = true;

                // Задаем вид пунктирной линии для крупных рисок по оси Y:
                // Длина штрихов равна одному пикселю, ...
                pane.YAxis.MinorGrid.DashOn = 1;

                // затем 2 пикселя - пропуск
                pane.YAxis.MinorGrid.DashOff = 2;

                // Включаем отображение сетки напротив мелких рисок по оси Y
                pane.XAxis.MinorGrid.IsVisible = true;

                // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
                pane.XAxis.MinorGrid.DashOn  = 1;
                pane.XAxis.MinorGrid.DashOff = 2;
                // Вызываем метод AxisChange (), чтобы обновить данные об осях.
                // В противном случае на рисунке будет показана только часть графика,
                // которая умещается в интервалы по осям, установленные по умолчанию
                график_Функции.zedGraphControl1.AxisChange();

                // Обновляем график
                график_Функции.zedGraphControl1.Invalidate();
                график_Функции.Show();
            }
            else
            {
                MessageBox.Show("Неверный формат чисел", "Ошибка", MessageBoxButtons.OK);
            }
        }
Пример #2
0
        private void Button1_Click(object sender, EventArgs e)
        {
            int  eps;
            bool is_double1 = true; //= double.TryParse(textBox1.Text, out a);
            bool is_double2 = double.TryParse(textBox2.Text, out b);
            bool is_int     = true; //= int.TryParse(textBox3.Text, out eps);

            if (visible)
            {
                is_double1 = double.TryParse(textBox1.Text, out a);
                is_double2 = double.TryParse(textBox2.Text, out b);
                is_int     = int.TryParse(textBox3.Text, out eps);
            }
            else
            {
                a   = 0;
                b   = 0.5;
                eps = 4;
            }
            if (is_double1 && is_double2 && is_int)
            {
                if (true)//a >= 0 && b < 3.1 && a < b)
                {
                    double abs = absE(a, b);
                    for (double i = a; i < b; i += 0.00001)
                    {
                        if (abs / FunctionsApp.f(i) > Math.Pow(10, -eps + 1))
                        {
                            check = false;
                        }
                    }
                    if (!check)
                    {
                        MessageBox.Show("Нарушен порядок точности", "Ошибка", MessageBoxButtons.OK);
                    }
                    else
                    {
                        for (int i = 0; i < 4; i++)
                        {
                            tabX[3 - i] = (a + b) / 2 + ((b - a) / 2) * Math.Cos((2 * i + 1) * Math.PI / (8));
                            tabY[3 - i] = FunctionsApp.f(tabX[3 - i]);
                        }
                        spline1.setTabPoints(this.tabX, this.tabY);
                        spline1.calculateSplineCoefficients();
                        spline2.setTabPoints(this.tabX, this.tabY);
                        spline2.calculateSplineCoefficients();
                        spline3.setTabPoints(this.tabX, this.tabY);
                        spline3.calculateAdditionalCoefficients();
                        spline3.calculateRunningCoefficients();
                        spline3.calculateSplineCoefficients();
                        label12.Text    = tabX[0].ToString().Remove(5);
                        label14.Text    = tabY[0].ToString().Remove(5);
                        label15.Text    = tabX[1].ToString().Remove(5);
                        label22.Text    = tabY[1].ToString().Remove(5);
                        label16.Text    = tabX[2].ToString().Remove(5);
                        label21.Text    = tabY[2].ToString().Remove(5);
                        label17.Text    = tabX[3].ToString().Remove(5);
                        label23.Text    = tabY[3].ToString().Remove(5);
                        button3.Visible = true;
                        button4.Visible = true;
                        button5.Visible = true;
                    }
                }
                else
                {
                    MessageBox.Show("Допустимые границы интервала:" + "\n" + "0 < a < b < 3.1", "Ошибка", MessageBoxButtons.OK);
                }
            }
            else
            {
                MessageBox.Show("Неверный формат чисел", "Ошибка", MessageBoxButtons.OK);
            }
        }
Пример #3
0
 double absE(double a, double b)
 {
     return(FunctionsApp.newtonDecent(d4f, d5f) * Math.Pow((b - a) / 2, 4) / 192);
 }
Пример #4
0
        private void Button4_Click_1(object sender, EventArgs e)
        {
            Сплайны   сплайны = new Сплайны();
            GraphPane pane    = сплайны.zedGraphControl1.GraphPane;

            pane.CurveList.Clear();

            // Создадим список точек
            PointPairList list0 = new PointPairList();
            PointPairList list1 = new PointPairList();
            PointPairList list2 = new PointPairList();
            PointPairList list3 = new PointPairList();

            for (double x = tabX[0]; x <= tabX[3]; x += 0.0001)
            {
                // добавим в список точку
                list0.Add(x, FunctionsApp.f(x));
                list1.Add(x, spline1.getPoint(x));
                list2.Add(x, spline2.getPoint(x));
                list3.Add(x, spline3.getPoint(x));
            }
            LineItem myCurve0 = pane.AddCurve("Primary function", list0, Color.Green, SymbolType.None);
            LineItem byCurve1 = pane.AddCurve("linear spline", list1, Color.Violet, SymbolType.None);
            LineItem myCurve2 = pane.AddCurve("parabolic spline", list2, Color.Red, SymbolType.None);
            LineItem myCurve3 = pane.AddCurve("cubic spline", list3, Color.Blue, SymbolType.None);

            pane.XAxis.MajorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси X:
            // Длина штрихов равна 10 пикселям, ...
            pane.XAxis.MajorGrid.DashOn = 10;

            // затем 5 пикселей - пропуск
            pane.XAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив крупных рисок по оси Y
            pane.YAxis.MajorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane.YAxis.MajorGrid.DashOn  = 10;
            pane.YAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив мелких рисок по оси X
            pane.YAxis.MinorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси Y:
            // Длина штрихов равна одному пикселю, ...
            pane.YAxis.MinorGrid.DashOn = 1;

            // затем 2 пикселя - пропуск
            pane.YAxis.MinorGrid.DashOff = 2;

            // Включаем отображение сетки напротив мелких рисок по оси Y
            pane.XAxis.MinorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane.XAxis.MinorGrid.DashOn  = 1;
            pane.XAxis.MinorGrid.DashOff = 2;
            // Вызываем метод AxisChange (), чтобы обновить данные об осях.
            // В противном случае на рисунке будет показана только часть графика,
            // которая умещается в интервалы по осям, установленные по умолчанию
            сплайны.zedGraphControl1.AxisChange();

            // Обновляем график
            сплайны.zedGraphControl1.Invalidate();
            сплайны.Show();
        }
Пример #5
0
        private void Button5_Click(object sender, EventArgs e)
        {
            Абсолютные_погрешности_полиномов Абсолютные_погрешности_полиномов = new Абсолютные_погрешности_полиномов();
            Ошибка_сплайнов ошибка_Сплайнов = new Ошибка_сплайнов();
            GraphPane       pane            = Абсолютные_погрешности_полиномов.zedGraphControl1.GraphPane;
            GraphPane       pane2           = ошибка_Сплайнов.zedGraphControl1.GraphPane;

            pane.CurveList.Clear();
            // Создадим список точек
            PointPairList list1 = new PointPairList();
            PointPairList list2 = new PointPairList();
            PointPairList list3 = new PointPairList();
            PointPairList list4 = new PointPairList();
            PointPairList list5 = new PointPairList();

            for (double x = a; x <= b; x += 0.000001)
            {
                // добавим в список точку
                list1.Add(x, Math.Abs(pN(x) - FunctionsApp.f(x)));
                list2.Add(x, Math.Abs(pL(x) - FunctionsApp.f(x)));
            }
            for (double x = tabX[0]; x < tabX[3]; x += 0.0001)
            {
                list3.Add(x, Math.Abs((FunctionsApp.f(x) - spline1.getPoint(x))) / FunctionsApp.f(x));
                list4.Add(x, Math.Abs((FunctionsApp.f(x) - spline2.getPoint(x))) / FunctionsApp.f(x));
                list5.Add(x, Math.Abs((FunctionsApp.f(x) - spline3.getPoint(x))) / FunctionsApp.f(x));
            }
            LineItem myCurve  = pane.AddCurve("Newton polynomial absolute error", list1, Color.Blue, SymbolType.None);
            LineItem myCurve2 = pane.AddCurve("Langrange polynomial absolute error", list2, Color.Red, SymbolType.Circle);
            LineItem myCurve3 = pane2.AddCurve("Linear spline error", list3, Color.Violet, SymbolType.None);
            LineItem myCurve4 = pane2.AddCurve("Parabolic spline error", list4, Color.Red, SymbolType.None);
            LineItem myCurve5 = pane2.AddCurve("Cubic spline error", list5, Color.Blue, SymbolType.None);

            pane.XAxis.MajorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси X:
            // Длина штрихов равна 10 пикселям, ...
            pane.XAxis.MajorGrid.DashOn = 10;

            // затем 5 пикселей - пропуск
            pane.XAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив крупных рисок по оси Y
            pane.YAxis.MajorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane.YAxis.MajorGrid.DashOn  = 10;
            pane.YAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив мелких рисок по оси X
            pane.YAxis.MinorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси Y:
            // Длина штрихов равна одному пикселю, ...
            pane.YAxis.MinorGrid.DashOn = 1;

            // затем 2 пикселя - пропуск
            pane.YAxis.MinorGrid.DashOff = 2;

            // Включаем отображение сетки напротив мелких рисок по оси Y
            pane.XAxis.MinorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane.XAxis.MinorGrid.DashOn  = 1;
            pane.XAxis.MinorGrid.DashOff = 2;

            pane2.XAxis.MajorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси X:
            // Длина штрихов равна 10 пикселям, ...
            pane2.XAxis.MajorGrid.DashOn = 10;

            // затем 5 пикселей - пропуск
            pane2.XAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив крупных рисок по оси Y
            pane2.YAxis.MajorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane2.YAxis.MajorGrid.DashOn  = 10;
            pane2.YAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив мелких рисок по оси X
            pane2.YAxis.MinorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси Y:
            // Длина штрихов равна одному пикселю, ...
            pane2.YAxis.MinorGrid.DashOn = 1;

            // затем 2 пикселя - пропуск
            pane2.YAxis.MinorGrid.DashOff = 2;

            // Включаем отображение сетки напротив мелких рисок по оси Y
            pane2.XAxis.MinorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane2.XAxis.MinorGrid.DashOn  = 1;
            pane2.XAxis.MinorGrid.DashOff = 2;
            ///////////////////////////////////////////////////

            // Вызываем метод AxisChange (), чтобы обновить данные об осях.
            // В противном случае на рисунке будет показана только часть графика,
            // которая умещается в интервалы по осям, установленные по умолчанию
            ошибка_Сплайнов.zedGraphControl1.AxisChange();
            ошибка_Сплайнов.zedGraphControl1.Invalidate();
            ошибка_Сплайнов.Show();
            Абсолютные_погрешности_полиномов.zedGraphControl1.AxisChange();
            // Обновляем график
            Абсолютные_погрешности_полиномов.zedGraphControl1.Invalidate();

            Абсолютные_погрешности_полиномов.Show();
        }
Пример #6
0
        private void Button3_Click(object sender, EventArgs e)
        {
            График_полинома_Лагранжа график_Полинома_Лагранжа = new График_полинома_Лагранжа();
            GraphPane pane = график_Полинома_Лагранжа.zedGraphControl1.GraphPane;

            pane.CurveList.Clear();

            // Создадим список точек
            PointPairList list  = new PointPairList();
            PointPairList list2 = new PointPairList();
            PointPairList list3 = new PointPairList();

            for (double x = a; x <= b; x += 0.000001)
            {
                // добавим в список точку
                list.Add(x, pL(x));
                list2.Add(x, pN(x));
                list3.Add(x, FunctionsApp.f(x));
            }
            LineItem myCurve  = pane.AddCurve("Lagrange polynomial", list, Color.Blue, SymbolType.None);
            LineItem myCurve2 = pane.AddCurve("Newton polynomial", list2, Color.Green, SymbolType.Circle);
            LineItem myCurve3 = pane.AddCurve("Basic function", list3, Color.Red, SymbolType.None);

            pane.XAxis.MajorGrid.IsVisible  = true;
            график_Полинома_Лагранжа.Newton = list2;
            // Задаем вид пунктирной линии для крупных рисок по оси X:
            // Длина штрихов равна 10 пикселям, ...
            pane.XAxis.MajorGrid.DashOn = 10;

            // затем 5 пикселей - пропуск
            pane.XAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив крупных рисок по оси Y
            pane.YAxis.MajorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane.YAxis.MajorGrid.DashOn  = 10;
            pane.YAxis.MajorGrid.DashOff = 5;


            // Включаем отображение сетки напротив мелких рисок по оси X
            pane.YAxis.MinorGrid.IsVisible = true;

            // Задаем вид пунктирной линии для крупных рисок по оси Y:
            // Длина штрихов равна одному пикселю, ...
            pane.YAxis.MinorGrid.DashOn = 1;

            // затем 2 пикселя - пропуск
            pane.YAxis.MinorGrid.DashOff = 2;

            // Включаем отображение сетки напротив мелких рисок по оси Y
            pane.XAxis.MinorGrid.IsVisible = true;

            // Аналогично задаем вид пунктирной линии для крупных рисок по оси Y
            pane.XAxis.MinorGrid.DashOn  = 1;
            pane.XAxis.MinorGrid.DashOff = 2;
            // Вызываем метод AxisChange (), чтобы обновить данные об осях.
            // В противном случае на рисунке будет показана только часть графика,
            // которая умещается в интервалы по осям, установленные по умолчанию
            график_Полинома_Лагранжа.zedGraphControl1.AxisChange();

            // Обновляем график
            график_Полинома_Лагранжа.zedGraphControl1.Invalidate();
            график_Полинома_Лагранжа.a = this.a;
            график_Полинома_Лагранжа.b = this.b;
            график_Полинома_Лагранжа.Show();
        }