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); }