private void button1_Click(object sender, EventArgs e) { chart1.Series[0].Points.Clear(); chart1.Series[1].Points.Clear(); chart1.Series[2].Points.Clear(); chart1.Series[3].Points.Clear(); chart1.Series[4].Points.Clear(); for (int i = 5; i < this.chart1.Series.Count; i++) { this.chart1.Series.RemoveAt(i); i--; } Program.data.textBox1.Items.Clear();//Program.data.textBox1.Text = ""; Program.data.textBox2.Text = ""; f = Math.Sin; L = null; N = null; R = null; S = null; if (radioButton4.Checked) { f = (double x) => { return(Math.Cos(x) + 1); } } ; if (radioButton5.Checked) { f = (double x) => { return(Math.Sin(x) * x); } } ; if (radioButton7.Checked) { f = (double x) => { return(x * x + 2 * x - 1); } } ; if (radioButton9.Checked) { f = (double x) => { return(Math.Exp(x) * Math.Sin(x)); } } ; if (radioButton10.Checked) { f = (double x) => { return(x * Math.Log(1 + Math.Abs(x))); } } ; if (radioButton11.Checked) { f = (double x) => { return(5); } } ; if (radioButton12.Checked) { f = (double x) => { return(x / (1 + x * x)); } } ; if (radioButton13.Checked) { f = (double x) => { return(Math.Sin(2 * x) / (Math.Abs(Math.Cos(x)) + Math.Abs(x) + x * x)); } } ; if (radioButton14.Checked) { f = (double x) => { return(Math.Sin(x) + x * x); } } ; if (radioButton15.Checked) { f = (double x) => { return((x * x * x - x * x + 2 * x - 1) / (x * x - 2 * x + 6)); } } ; if (radioButton16.Checked) { f = (double x) => { return(Math.Sqrt(Math.Abs(x))); } } ; if (radioButton17.Checked) { f = (double x) => { return(Math.Abs(Math.Sin(x)) + Math.Cos(x) - 1); } } ; if (radioButton18.Checked) { string s = textBox10.Text; try { f = Parser.GetDelegate(s); textBox10.Text = Parser.FORMULA; } catch { f = (double x) => 0; } } МатКлассы.Point[] mas = null; double min = Convert.ToDouble(textBox6.Text), max = Convert.ToDouble(textBox7.Text); if (radioButton1.Checked) { StreamReader fs = new StreamReader("input.txt"); mas = МатКлассы.Point.Points(fs); } if (radioButton2.Checked) { double a = Convert.ToDouble(textBox2.Text); double b = Convert.ToDouble(textBox3.Text); int m = Convert.ToInt32(textBox1.Text); mas = МатКлассы.Point.Points(f, m - 1, a, b); if (!checkBox5.Checked) { min = mas[0].x; max = mas[mas.Length - 1].x; } chart1.Series[0].Points.DataBindXY(МатКлассы.Point.PointsX(f, 100, min, max), МатКлассы.Point.PointsY(f, 100, min, max)); } if (radioButton6.Checked) { int m = Convert.ToInt32(textBox1.Text); mas = new МатКлассы.Point[m]; string s; string[] st; for (int k = 0; k < m; k++) { s = textBox5.Lines[k]; st = s.Split(' ');//в аргументах указывается массив символов, которым разделяются числа mas[k] = new МатКлассы.Point(Convert.ToDouble(st[0]), Convert.ToDouble(st[1])); } } if (radioButton8.Checked) { int m = Convert.ToInt32(textBox1.Text); mas = new МатКлассы.Point[m]; string s; string[] st; for (int k = 0; k < m; k++) { s = textBox5.Lines[k]; st = s.Split(' ');//в аргументах указывается массив символов, которым разделяются числа double v = Convert.ToDouble(st[0]); mas[k] = new МатКлассы.Point(v, f(v)); } if (!checkBox5.Checked) { min = mas[0].x; max = mas[mas.Length - 1].x; } chart1.Series[0].Points.DataBindXY(МатКлассы.Point.PointsX(f, 100, min, max), МатКлассы.Point.PointsY(f, 100, min, max)); } Draw_mas(mas, Color.Orchid); chart1.Series[0].Name = "Интерполируемая функция"; chart1.Series[1].Name = "Полином Лагранжа"; chart1.Series[2].Name = "Полином Ньютона"; chart1.Series[3].Name = "Рациональная функция"; chart1.Series[4].Name = "Сплайн"; if (!checkBox5.Checked) { min = mas[0].x; max = mas[mas.Length - 1].x; } if (checkBox1.Checked) { Polynom p = new Polynom(mas); chart1.Series[1].Points.DataBindXY(МатКлассы.Point.PointsX(p.Value, 100, min, max), МатКлассы.Point.PointsY(p.Value, 100, min, max)); Program.data.textBox1.Items.Add(String.Format("Интерполяционный полином Лагранжа в степенном базисе: {0}", p.ToString())); L = p.Value; } if (checkBox2.Checked) { Polynom p = Polynom.Neu(mas); chart1.Series[2].Points.DataBindXY(МатКлассы.Point.PointsX(p.Value, 100, min, max), МатКлассы.Point.PointsY(p.Value, 100, min, max)); Program.data.textBox1.Items.Add(""); Program.data.textBox1.Items.Add(String.Format("Интерполяционный полином Ньютона в степенном базисе: {0}", p.ToString())); N = p.Value; } if (checkBox4.Checked) { double a = Convert.ToDouble(textBox9.Text); double b = Convert.ToDouble(textBox8.Text); S = Polynom.CubeSpline(mas, a, b); chart1.Series[4].Points.DataBindXY(МатКлассы.Point.PointsX(S, 100, min, max), МатКлассы.Point.PointsY(S, 100, min, max)); if (checkBox6.Checked) { Func <double, double> S1 = Polynom.DSpline, S2 = Polynom.D2Spline; this.chart1.Series.Add("Первая производная сплайна"); int count = this.chart1.Series.Count - 1; this.chart1.Series[count].Color = Color.Aqua; this.chart1.Series[count].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; this.chart1.Series[count].BorderWidth = 3; chart1.Series[count].Points.DataBindXY(МатКлассы.Point.PointsX(S1, 100, min, max), МатКлассы.Point.PointsY(S1, 100, min, max)); this.chart1.Series.Add("Вторая производная сплайна"); count = this.chart1.Series.Count - 1; this.chart1.Series[count].Color = Color.Black; this.chart1.Series[count].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; this.chart1.Series[count].BorderWidth = 3; chart1.Series[count].Points.DataBindXY(МатКлассы.Point.PointsX(S2, 100, min, max), МатКлассы.Point.PointsY(S2, 100, min, max)); } Program.data.textBox1.Items.Add(""); if (Program.data.checkBox1.Checked) { Program.data.textBox1.Items.Add("Полученная система: "); SHOWS(Polynom.syst); } Program.data.textBox1.Items.Add("Интерполяционный сплайн (по отрезкам): "); for (int i = 0; i < Polynom.SplinePol.Length; i++) { Program.data.textBox1.Items.Add("\t" + Polynom.SplinePol[i]); } } if (checkBox3.Checked) { //int p = Convert.ToInt32(textBox4.Text); int p = Convert.ToInt32(firstRowNum.Value); int bq = Convert.ToInt32(textBox4.Text); int q = mas.Length - 1 - p; R = Polynom.R(mas, p, q, bq); chart1.Series[3].Points.DataBindXY(МатКлассы.Point.PointsX(R, 100, min, max), МатКлассы.Point.PointsY(R, 100, min, max)); Program.data.textBox1.Items.Add(""); if (Program.data.checkBox1.Checked) { Program.data.textBox1.Items.Add("Полученная система: "); SHOWS(Polynom.syst); } Program.data.textBox1.Items.Add(String.Format("Интерполяционная рациональная функция: {0}", Polynom.Rat)); } button4.Show(); //double h = 0.2; //int n = (int)((10.0 + 10.0) / h), i = 0; //double[] xx = new double[n + 5]; //double[] yy = new double[n + 5]; //for (double x = -10.0; x <= 10.0; x += h) //{ // chart1.Series[0].Points.AddXY(x, Math.Cos(x)); // xx[i] = x; // yy[i] = Math.Cos(x); // i++; //} ////chart1.Series[0].Points.D ////Func<double,double> f = Math.Cos, p = Polynom.Derivative(f, 14, -10, 10, 4).Value, g = Polynom.Lag(f, 12, -10, 10).Value; //МатКлассы.Point[] mas = new МатКлассы.Point[5]; //mas[0] = new МатКлассы.Point(0, 1); //mas[1] = new МатКлассы.Point(1, -5); //mas[2] = new МатКлассы.Point(2, 0); //mas[3] = new МатКлассы.Point(3, 1); //mas[4] = new МатКлассы.Point(4, 1); //Func<double,double> g = Polynom.CubeSpline(mas); //Func<double,double> f = (double x) => { return x * Math.Sin(x) + 1; }; //SequenceFunc p = (double x, int n) => { return Polynom.Lezh(n).Value(x); }; //FuncMethods.Approx(f, p, SequenceFundKind.Orthogonal, 6, -1, 1); //chart1.Series[0].Color = Color.Gold; //chart1.Series[0].Points.DataBindXY(МатКлассы.Point.PointsX(g, 100, -1, 2), МатКлассы.Point.PointsY(g, 100, -1, 2)); //chart1.Series[1].Points.DataBindXY(МатКлассы.Point.PointsX(f, 100, -1, 1), МатКлассы.Point.PointsY(f, 100, -1, 1)); //chart1.SaveImage(@"Image.png", System.Drawing.Imaging.ImageFormat.Png); }
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(); } }