private void Draw_mas(Point[] r, Color color) //нарисовать массив точек
        {
            //SetColor(R, G, B); // задаем цвет линии
            //if(R==0)
            //Program.FORM.chart1.Series[0].Color = Color.Green;
            FuncMethods.NetFunc u = new FuncMethods.NetFunc(r);

            int    N = r.Length;
            double e = (u.MaxArg - u.MinArg) / 150;

            for (int i = 0; i < N; i++)
            {
                this.chart1.Series.Add("");
                int count = this.chart1.Series.Count - 1;
                this.chart1.Series[count].Color = color;

                this.chart1.Series[count].ChartType         = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                this.chart1.Series[count].IsVisibleInLegend = false;
                this.chart1.Series[count].BorderWidth       = 3;
                this.chart1.Series[count].Points.AddXY(r[i].x - e, r[i].y - e); // устанавливаем курсор на точку
                this.chart1.Series[count].Points.AddXY(r[i].x + e, r[i].y + e); //рисуем line
                //-----------------------------------------------------------------
                this.chart1.Series.Add("");
                count = this.chart1.Series.Count - 1;
                this.chart1.Series[count].Color = color;

                this.chart1.Series[count].ChartType         = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                this.chart1.Series[count].IsVisibleInLegend = false;
                this.chart1.Series[count].BorderWidth       = 3;
                this.chart1.Series[count].Points.AddXY(r[i].x - e, r[i].y + e); // устанавливаем курсор на точку
                this.chart1.Series[count].Points.AddXY(r[i].x + e, r[i].y - e); //рисуем line
            }
            //Program.FORM.chart1.Series[0].Color = Color.Red;
        }
Beispiel #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear();

            double a, b, A, B, D, A1, B1, D1;

            a  = Convert.ToDouble(textBox12.Text); b = Convert.ToDouble(textBox13.Text);
            A  = textBox6.Text.ToDouble(); B = textBox7.Text.ToDouble(); D = textBox8.Text.ToDouble();
            A1 = textBox11.Text.ToDouble(); B1 = textBox10.Text.ToDouble(); D1 = textBox9.Text.ToDouble();

            Func <double, double> u, g, h, s, f;

            u = Parser.GetDelegate(textBox1.Text);
            g = Parser.GetDelegate(textBox2.Text);
            h = Parser.GetDelegate(textBox3.Text);
            s = Parser.GetDelegate(textBox4.Text);
            f = Parser.GetDelegate(textBox5.Text);

//u(0).Show();
//g(0).Show();
//h(0).Show();
//s(0).Show();
//f(0).Show();

            int    N = Convert.ToInt32(numericUpDown1.Value);
            double nev;

            FuncMethods.NetFunc res = SchLiuQu(g, h, s, f, out nev, a, b, N, A, B, D, A1, B1, D1, radioButton4.Checked);
            double t = (b - a) / (150 - 1);

            for (int i = 0; i < 150; i++)
            {
                double arg = a + i * t;
                chart1.Series[0].Points.AddXY(arg, u(arg));
            }
            chart1.Series[1].Points.DataBindXY(res.Arguments, res.Values);

            label15.Text = "Расстояние = " + FuncMethods.NetFunc.Distance(res, u).ToString();
            label16.Text = "Невязка = " + nev.ToString();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 9; i++)
            {
                Program.FORM.chart1.Series[i].Points.Clear();
            }
            for (int i = 0; i < chart1.Series.Count; i++)
            {
                chart1.Series[i].IsVisibleInLegend = false;
            }
            for (int i = 9; i < Program.FORM.chart1.Series.Count; i++)
            {
                Program.FORM.chart1.Series.RemoveAt(i); i--;
            }

            Func <double, double> f = Math.Sin;

            FuncMethods.NetFunc   net = new FuncMethods.NetFunc();
            Func <double, double> g1, g2, g3, g4, g5, g6, g7;

            //SequenceFunc Monom, Leg, Cheb, Lager, Her, Trig, Har;
            g1 = g2 = g3 = g4 = g5 = g6 = g7 = null;

            //определить действительную функцию
            if (radioButton5.Checked)
            {
                f = (double x) => (Math.Cos(x) - 1);
            }
            if (radioButton6.Checked)
            {
                f = (double x) => (Math.Abs(x - 1));
            }
            if (radioButton7.Checked)
            {
                f = (double x) => (Math.Exp(x - x * x));
            }
            if (radioButton8.Checked)
            {
                f = (double x) => (Math.Exp(x) / (Math.Abs(x) + 1));
            }
            if (radioButton9.Checked)
            {
                f = (double x) => (x * Math.Sin(x) / (Math.Abs(x) + 2));
            }
            if (radioButton10.Checked)
            {
                f = (double x) => (x / (1 + x * x));
            }
            if (radioButton11.Checked)
            {
                f = (double x) => (x * Math.Cos(x));
            }
            if (radioButton12.Checked)
            {
                f = (double x) => (Math.Log(1 + Math.Abs(x)));
            }
            if (radioButton13.Checked)
            {
                f = (double x) => (x * x * x + x - 4);
            }
            if (radioButton14.Checked)
            {
                f = (double x) => (3);
            }
            if (radioButton15.Checked)
            {
                f = (double x) => (2 * x - Math.Exp(-x));
            }
            if (radioButton16.Checked)
            {
                string s = textBox7.Text;
                try
                {
                    f             = Parser.GetDelegate(s);
                    textBox7.Text = Parser.FORMULA;
                }
                catch
                {
                    f = (double x) => 0;
                }
            }
            chart1.Series[0].IsVisibleInLegend = true;

            FileStream   fs  = new FileStream("Данные об аппроксимации.txt", FileMode.Create);
            TextWriter   tmp = Console.Out;
            StreamWriter sw  = new StreamWriter(fs);

            Console.SetOut(sw);

            const string message = "Все доступные поля должны быть заполнены действительными числами. Число шагов и число отрезков - натуральными числами. При записи действительных чисел используются запятые, а не точки. Количество заверенных точек должно быть не больше количества действительно заданных точек.";
            const string caption = "Неверные входные данные!";

            try
            {
                int n1 = Convert.ToInt32(numericUpDown1.Value), n2 = Convert.ToInt32(numericUpDown2.Value);
                double[,] MAS = new double[chart1.Series.Count, n2 + 1];

                //определить сеточную функцию
                if (!radioButton1.Checked)
                {
                    double  a = Convert.ToDouble(textBox1.Text), b = Convert.ToDouble(textBox2.Text);
                    int     n = Convert.ToInt16(textBox6.Text), ccount = Convert.ToInt32(numericUpDown3.Value);
                    double  h = (b - a) / (ccount - 1);
                    Point[] mas1, mas2, mas3 = new Point[ccount];

                    for (int i = 0; i < ccount; i++)
                    {
                        mas3[i] = new Point(a + i * h, f(a + i * h));
                    }

                    //чтение набора узлов
                    int m = Convert.ToInt32(textBox4.Text);
                    mas2 = new МатКлассы.Point[m];
                    string   s;
                    string[] st;
                    for (int k = 0; k < m; k++)
                    {
                        s       = textBox5.Lines[k];
                        st      = s.Split(' ');//в аргументах указывается массив символов, которым разделяются числа
                        mas2[k] = new МатКлассы.Point(Convert.ToDouble(st[0]), Convert.ToDouble(st[1]));
                    }
                    //чтение массива абцисс
                    s    = textBox3.Lines[0];
                    st   = s.Split(' ');//в аргументах указывается массив символов, которым разделяются числа;
                    m    = st.Length;
                    mas1 = new МатКлассы.Point[m];
                    for (int k = 0; k < m; k++)
                    {
                        double v = Convert.ToDouble(st[k]);
                        mas1[k] = new МатКлассы.Point(v, f(v));
                    }

                    if (radioButton2.Checked)
                    {
                        net = new FuncMethods.NetFunc(mas1);
                    }
                    else
                    {
                        net = new FuncMethods.NetFunc(mas2);
                    }
                    if (checkBox10.Checked)
                    {
                        net = new FuncMethods.NetFunc(mas3);
                    }

                    a = net.MinArg;
                    b = net.MaxArg;

                    if (checkBox9.Checked)
                    {
                        for (n = n1; n <= n2; n++)
                        {
                            Matrix O = new Matrix(MAS);
                            O.PrintMatrix(); "".Show();

                            if (checkBox1.Checked)
                            {
                                SequenceFunc          t = FuncMethods.Monoms;
                                Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Other, n);
                                if (radioButton2.Checked)
                                {
                                    MAS[1, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                }
                                else
                                {
                                    MAS[1, n] = FuncMethods.NetFunc.Distance(net, g);
                                }
                                chart1.Series[1].Points.AddXY(n, Math.Log10(MAS[1, n])); chart1.Series[1].IsVisibleInLegend = true;
                            }

                            if (checkBox2.Checked)
                            {
                                SequenceFunc          t = FuncMethods.Lezhandrs(a, b);
                                Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Orthogonal, n);
                                if (radioButton2.Checked)
                                {
                                    MAS[2, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                }
                                else
                                {
                                    MAS[2, n] = FuncMethods.NetFunc.Distance(net, g);
                                }
                                chart1.Series[2].Points.AddXY(n, Math.Log10(MAS[2, n])); chart1.Series[2].IsVisibleInLegend = true;
                            }

                            if (checkBox6.Checked)
                            {
                                SequenceFunc          t = FuncMethods.TrigSystem(a, b);
                                Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Orthonormal, n);
                                if (radioButton2.Checked)
                                {
                                    MAS[6, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                }
                                else
                                {
                                    MAS[6, n] = FuncMethods.NetFunc.Distance(net, g);
                                }
                                chart1.Series[6].Points.AddXY(n, Math.Log10(MAS[6, n])); chart1.Series[6].IsVisibleInLegend = true;
                            }
                            if (checkBox7.Checked)
                            {
                                SequenceFunc          t = FuncMethods.HaarSystem(a, b);
                                Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Orthogonal, n);
                                if (radioButton2.Checked)
                                {
                                    MAS[7, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                }
                                else
                                {
                                    MAS[7, n] = FuncMethods.NetFunc.Distance(net, g);
                                }
                                chart1.Series[7].Points.AddXY(n, Math.Log10(MAS[7, n])); chart1.Series[7].IsVisibleInLegend = true;
                            }
                            if (checkBox8.Checked)
                            {
                                SequenceFunc          t = (double x, int k) => Math.Exp(k * x);
                                Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Other, n);
                                if (radioButton2.Checked)
                                {
                                    MAS[8, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                }
                                else
                                {
                                    MAS[8, n] = FuncMethods.NetFunc.Distance(net, g);
                                }
                                chart1.Series[8].Points.AddXY(n, Math.Log10(MAS[8, n])); chart1.Series[8].IsVisibleInLegend = true;
                            }
                        }
                    }
                    else//если рисуется не график зависимости от числа функций
                    {
                        if (radioButton2.Checked)
                        {
                            net = new FuncMethods.NetFunc(mas1); Draw_mas(mas1, Color.Blue);
                        }
                        else
                        {
                            net = new FuncMethods.NetFunc(mas2); Draw_mas(mas2, Color.Blue);
                        }
                        if (checkBox10.Checked)
                        {
                            net = new FuncMethods.NetFunc(mas3); Draw_mas(mas3, Color.Blue);
                        }
                        a = net.MinArg;
                        b = net.MaxArg;

                        //ShowPoints(net);//показать точки на графике
                        if (checkBox1.Checked)
                        {
                            SequenceFunc t = FuncMethods.Monoms;
                            //SequencePol t = FuncMethods.Monom;
                            Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Other, n);
                            chart1.Series[1].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[1].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы мономов---------");
                            if (radioButton2.Checked)
                            {
                                FuncMethods.ShowApprox(f, net.Arguments, t, SequenceFuncKind.Other, n);
                            }
                            else
                            {
                                FuncMethods.ShowApprox(net, t, SequenceFuncKind.Other, n);
                            }
                        }
                        //Наименьшие перпендикуляры
                        if (n == 2)
                        {
                            double a0 = 0, a1 = 0;
                            double dist = 0, distold = 0;;
                            SLAU   S = new SLAU(2);
                            for (int i = 0; i < net.CountKnots; i++)
                            {
                                S.A[0, 0] += net.Arg(i);
                                S.A[1, 0] += net.Arg(i) * net[i];
                                S.A[1, 1] += net[i];
                                S.b[1]    -= net[i] * net[i];
                            }
                            S.A[0, 1] = net.CountKnots;
                            S.b[0]    = -S.A[1, 1];
                            //S.Show();
                            S.GaussSelection();
                            a1 = S.x[0]; a0 = S.x[1];
                            Func <double, double> pol = new Polynom(new double[] { -a0, -a1 }).Value;
                            SLAU T = new SLAU(FuncMethods.Monoms, net, n);
                            T.Gauss();//T.Show();

                            for (int i = 0; i < net.CountKnots; i++)
                            {
                                dist    += Math.Pow(a1 * net.Arg(i) + net[i] + a0, 2);
                                distold += Math.Pow(T.x[1] * net.Arg(i) + net[i] + T.x[0], 2);
                            }
                            dist    /= net.CountKnots;
                            distold /= net.CountKnots;
                            dist     = Math.Sqrt(dist);
                            distold  = Math.Sqrt(distold);

                            Console.WriteLine("\t(в среднеквадратичной норме перпендикуляров) равна {0}", distold);

                            Program.FORM.chart1.Series.Add("Прямая с наилучшими перпендикулярами");
                            int count = Program.FORM.chart1.Series.Count - 1;
                            Program.FORM.chart1.Series[count].Color     = Color.Black;
                            Program.FORM.chart1.Series[count].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
                            //Program.FORM.chart1.Series[count].IsVisibleInLegend = false;
                            Program.FORM.chart1.Series[count].BorderWidth = 2;
                            chart1.Series[count].Points.DataBindXY(МатКлассы.Point.PointsX(pol, 100, a, b), МатКлассы.Point.PointsY(pol, 100, a, b));
                            Console.WriteLine("--------Для наименьших перпендикуляров---------");
                            Console.WriteLine("Аппроксимация сеточной функции полученной функцией");
                            Console.WriteLine("\t(в дискретной среднеквадратичной норме) равна {0}", FuncMethods.NetFunc.Distance(net, pol));
                            Console.WriteLine("\t(в среднеквадратичной норме перпендикуляров) равна {0}", dist);
                        }

                        if (checkBox2.Checked)
                        {
                            SequenceFunc t = FuncMethods.Lezhandrs(a, b);
                            //SequencePol t = FuncMethods.Lezhandr(a, b);
                            Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Orthogonal, n);
                            chart1.Series[2].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[2].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы полиномов Лежандра---------");
                            if (radioButton2.Checked)
                            {
                                FuncMethods.ShowApprox(f, net.Arguments, t, SequenceFuncKind.Orthogonal, n);
                            }
                            else
                            {
                                FuncMethods.ShowApprox(net, t, SequenceFuncKind.Orthogonal, n);
                            }
                        }

                        if (checkBox6.Checked)
                        {
                            SequenceFunc          t = FuncMethods.TrigSystem(a, b);
                            Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Orthonormal, n);
                            chart1.Series[6].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[6].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для ортонормированной системы тригонометрических полиномов---------");
                            if (radioButton2.Checked)
                            {
                                FuncMethods.ShowApprox(f, net.Arguments, t, SequenceFuncKind.Orthonormal, n);
                            }
                            else
                            {
                                FuncMethods.ShowApprox(net, t, SequenceFuncKind.Orthonormal, n);
                            }
                        }
                        if (checkBox7.Checked)
                        {
                            SequenceFunc          t = FuncMethods.HaarSystem(a, b);
                            Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Orthogonal, n);
                            chart1.Series[7].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[7].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы Хаара---------");
                            if (radioButton2.Checked)
                            {
                                FuncMethods.ShowApprox(f, net.Arguments, t, SequenceFuncKind.Orthogonal, n);
                            }
                            else
                            {
                                FuncMethods.ShowApprox(net, t, SequenceFuncKind.Orthogonal, n);
                            }
                        }
                        if (checkBox8.Checked)
                        {
                            SequenceFunc          t = (double x, int k) => Math.Exp(k * x);
                            Func <double, double> g = FuncMethods.Approx(net, t, SequenceFuncKind.Other, n);
                            chart1.Series[8].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[8].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы экспонент---------");
                            if (radioButton2.Checked)
                            {
                                FuncMethods.ShowApprox(f, net.Arguments, t, SequenceFuncKind.Other, n);
                            }
                            else
                            {
                                FuncMethods.ShowApprox(net, t, SequenceFuncKind.Other, n);
                            }
                        }
                    }
                }
                else
                {
                    double a = Convert.ToDouble(textBox1.Text), b = Convert.ToDouble(textBox2.Text);
                    int    n = Convert.ToInt16(textBox6.Text);

                    if (checkBox9.Checked)
                    {
                        chart1.Series[0].Name = "Функция по системе Хаара, выраженная без учёта ортогональности этой системы";
                        chart1.Series[0].IsVisibleInLegend = true;
                        for (n = n1; n <= n2; n++)
                        {
                            if (checkBox1.Checked)
                            {
                                //SequenceFunc t = FuncMethods.Monoms;
                                SequencePol           t = FuncMethods.Monom;
                                Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b);
                                MAS[1, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                chart1.Series[1].Points.AddXY(n, Math.Log10(MAS[1, n])); chart1.Series[1].IsVisibleInLegend = true;
                                chart1.Series[1].Name = "Мономы с применением ультра-гибрида";

                                //g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b, false);
                                //MAS[0, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                //chart1.Series[0].Points.AddXY(n, Math.Log10(MAS[0, n]));
                                //chart1.Series[0].IsVisibleInLegend = true;
                            }
                            if (checkBox2.Checked)
                            {
                                //SequenceFunc t = FuncMethods.Lezhandrs(a,b);
                                SequencePol t = FuncMethods.Lezhandr(a, b);

                                Polynom s = new Polynom(new double[] { -2 * a / (b - a) - 1, 2.0 / (b - a) });
                                Func <double, double>[] MyMas = new Func <double, double> [n];
                                for (int i = 0; i < n; i++)
                                {
                                    MyMas[i] = /*Polynom.Lezh(i).Value;*/ Polynom.Lezh(i).Value(s).Value;
                                }
                                //Func<double,double> g = FuncMethods.ApproxForLezhandr(f, MyMas, a, b);
                                Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Orthogonal, n, a, b);
                                MAS[2, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                chart1.Series[2].Points.AddXY(n, Math.Log10(MAS[2, n])); chart1.Series[2].IsVisibleInLegend = true;
                            }
                            if (checkBox6.Checked)
                            {
                                SequenceFunc          t = FuncMethods.TrigSystem(a, b);
                                Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Orthonormal, n, a, b);
                                MAS[6, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                chart1.Series[6].Points.AddXY(n, Math.Log10(MAS[6, n])); chart1.Series[6].IsVisibleInLegend = true;
                                chart1.Series[6].Name = "Тригонометрическая система с применением ультра-гибрида";

                                //g = FuncMethods.Approx(f, t, SequenceFuncKind.Orthonormal, n, a, b, false);
                                //MAS[0, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                //chart1.Series[0].Points.AddXY(n, Math.Log10(MAS[0, n]));
                                //chart1.Series[0].IsVisibleInLegend = true;
                            }
                            if (checkBox7.Checked)
                            {
                                SequenceFunc          t = FuncMethods.HaarSystem(a, b);
                                Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Orthogonal, n, a, b);
                                MAS[7, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                chart1.Series[7].Points.AddXY(n, Math.Log10(MAS[7, n])); chart1.Series[7].IsVisibleInLegend = true;
                                chart1.Series[7].Name = "Система Хаара как ортогональная система";

                                //g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b, false);
                                //MAS[0, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                //chart1.Series[0].Points.AddXY(n, Math.Log10(MAS[0, n]));
                                //chart1.Series[0].IsVisibleInLegend = true;
                            }
                            if (checkBox8.Checked)
                            {
                                SequenceFunc          t = (double x, int k) => Math.Exp(k * x);
                                Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b);
                                MAS[8, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                chart1.Series[8].Points.AddXY(n, Math.Log10(MAS[8, n])); chart1.Series[8].IsVisibleInLegend = true;
                                chart1.Series[8].Name = "Экспоненты с применением ультра-гибрида";

                                //g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b, false);
                                //MAS[0, n] = FuncMethods.RealFuncMethods.NormDistance(f, g, a, b);
                                //chart1.Series[0].Points.AddXY(n, Math.Log10(MAS[0, n]));
                                //chart1.Series[0].IsVisibleInLegend = true;
                            }
                        }
                        Analys(MAS, n1, n2);
                    }
                    else
                    {
                        chart1.Series[0].Points.DataBindXY(МатКлассы.Point.PointsX(f, 100, a, b), МатКлассы.Point.PointsY(f, 100, a, b));
                        if (checkBox1.Checked)
                        {
                            //SequenceFunc t = FuncMethods.Monoms;
                            SequencePol           t = FuncMethods.Monom;
                            Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b);
                            chart1.Series[1].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[1].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы мономов---------");
                            FuncMethods.ShowApprox(f, t, SequenceFuncKind.Other, n, a, b);
                        }
                        if (checkBox2.Checked)
                        {
                            //SequenceFunc t = FuncMethods.Lezhandrs(a,b);
                            SequencePol             t     = FuncMethods.Lezhandr(a, b);
                            Polynom                 s     = new Polynom(new double[] { -2 * a / (b - a) - 1, 2.0 / (b - a) });
                            Func <double, double>[] MyMas = new Func <double, double> [n];
                            for (int i = 0; i < n; i++)
                            {
                                MyMas[i] = /*Polynom.Lezh(i).Value;*/ Polynom.Lezh(i).Value(s).Value;
                            }
                            Func <double, double> g = FuncMethods.ApproxForLezhandr(f, MyMas, a, b);
                            chart1.Series[2].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[2].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы полиномов Лежандра---------");
                            FuncMethods.ShowApprox(f, t, SequenceFuncKind.Orthogonal, n, a, b);
                        }
                        if (checkBox3.Checked)
                        {
                            //SequencePol t = FuncMethods.Cheb(a,b);
                            SequenceFunc          t = FuncMethods.Chebs(a, b);
                            Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b);
                            chart1.Series[3].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[3].IsVisibleInLegend = true;
                        }
                        if (checkBox4.Checked)
                        {
                            SequenceFunc          t = FuncMethods.Lagerrs(a, b);
                            Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b);
                            chart1.Series[4].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[4].IsVisibleInLegend = true;
                        }
                        if (checkBox5.Checked)
                        {
                            SequenceFunc          t = FuncMethods.Hermits(a, b);
                            Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b);
                            chart1.Series[5].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[5].IsVisibleInLegend = true;
                        }
                        if (checkBox6.Checked)
                        {
                            SequenceFunc          t = FuncMethods.TrigSystem(a, b);
                            Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Orthonormal, n, a, b);
                            chart1.Series[6].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[6].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для ортонормированной системы тригонометрических полиномов---------");
                            FuncMethods.ShowApprox(f, t, SequenceFuncKind.Orthonormal, n, a, b);
                        }
                        if (checkBox7.Checked)
                        {
                            SequenceFunc          t = FuncMethods.HaarSystem(a, b);
                            Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Orthogonal, n, a, b);
                            chart1.Series[7].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[7].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы Хаара---------");
                            FuncMethods.ShowApprox(f, t, SequenceFuncKind.Orthogonal, n, a, b);
                        }
                        if (checkBox8.Checked)
                        {
                            SequenceFunc          t = (double x, int k) => Math.Exp(k * x);
                            Func <double, double> g = FuncMethods.Approx(f, t, SequenceFuncKind.Other, n, a, b);
                            chart1.Series[8].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, a, b), МатКлассы.Point.PointsY(g, 100, a, b)); chart1.Series[8].IsVisibleInLegend = true;
                            Console.WriteLine("--------Для системы экспонент---------");
                            FuncMethods.ShowApprox(f, t, SequenceFuncKind.Other, n, a, b);
                        }
                    }
                }
            }
            catch
            {
                var MBSave = MessageBox.Show(message, caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            finally
            {
                sw.Close();



                Console.SetOut(tmp);
                Console.WriteLine("Запись завершена!");

                Program.DATA.textBox1.Text = "";
                StreamReader sr = new StreamReader("Данные об аппроксимации.txt");
                string       ss = "";
                while (ss != null)
                {
                    Program.DATA.textBox1.Text += ss + Environment.NewLine;
                    ss = sr.ReadLine();
                }
                sr.Close();
            }
        }