private void button1_Click(object sender, EventArgs e) { try { N_max = int.Parse(N_max_base_1_textBox2.Text); u0[0] = double.Parse(u0_base_1_textBox11.Text); //u0_test_textBox1.Text);//u0_base_1_textBox11.Text); h = double.Parse(h_base_1_textBox9.Text); //h_test_textBox2.Text);//h_base_1_textBox9.Text); //b_h = double.Parse(b_h_test_textBox11.Text);//b_base_1_textBox7.Text); } catch { MessageBox.Show("Некорректные данные"); } dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); graf_chart1.Series.Clear(); Series SeriesOfPoints_Selective = new Series("Численное"); SeriesOfPoints_Selective.ChartType = SeriesChartType.Line; SeriesOfPoints_Selective.Color = Color.Red; SeriesOfPoints_Selective.BorderWidth = 1; /*Series SeriesOfPoints_Selective_Tochnoe = new Series("Точное"); * SeriesOfPoints_Selective_Tochnoe.ChartType = SeriesChartType.Line; * SeriesOfPoints_Selective_Tochnoe.Color = Color.Green; * SeriesOfPoints_Selective_Tochnoe.BorderWidth = 1;*/ dataGridView1.RowCount = N_max + 1; dataGridView1.ColumnCount = 6; dataGridView1.Columns[0].HeaderText = "i"; dataGridView1.Columns[1].HeaderText = "xi"; dataGridView1.Columns[2].HeaderText = "vi"; dataGridView1.Columns[3].HeaderText = "v2i"; dataGridView1.Columns[4].HeaderText = "vi-v2i"; dataGridView1.Columns[5].HeaderText = "ОЛП"; //dataGridView1.Columns[6].HeaderText = "ui"; //dataGridView1.Columns[7].HeaderText = "|ui-vi|"; dataGridView1.Columns[0].Width = 50; dataGridView1.Columns[1].Width = 80; for (int i = 2; i < 6; i++) { dataGridView1.Columns[i].Width = 160; } RightPart_test_task task = new RightPart_test_task(); RightPart_test_task task1 = new RightPart_test_task(); RightPart_test_task task_h_2 = new RightPart_test_task(); task.SetInit(0, u0); //SetInit(double x0, double[] U0, double a_, double b_) task1.SetInit(0, u0); //SetInit(double x0, double[] U0, double a_, double b_) task_h_2.SetInit(0, u0); double maxuivi = Math.Abs(task.U[0] - u0[0] * Math.Exp(task.x)); //Math.Abs(task.U[0] - Math.Exp(task.x)); double x1 = task.x; double maxmodolp = 0; int s = 1; for (int k = 0; k < N_max; k++) { if (k == 0) { //НУ dataGridView1.Rows[k].Cells[0].Value = 0; dataGridView1.Rows[k].Cells[1].Value = task.x; //xn=x0 dataGridView1.Rows[k].Cells[2].Value = task.U[0]; //vn=u0 dataGridView1.Rows[k].Cells[3].Value = task1.U[0]; //v2n=u0 dataGridView1.Rows[k].Cells[4].Value = task.U[0] - task1.U[0]; //vn-v2n=0 dataGridView1.Rows[k].Cells[5].Value = 0; //dataGridView1.Rows[k].Cells[6].Value = Math.Exp(task.x) * u0[0];//ui //dataGridView1.Rows[k].Cells[7].Value = Math.Abs(task.U[0] - Math.Exp(task.x) * u0[0]);//vi-ui SeriesOfPoints_Selective.Points.AddXY(0, task.U[0]); } task_h_2.x = task.x; //xn task_h_2.U[0] = task.U[0]; //vn task.NextStep(h); task1.NextStep(h / 2.0); task1.x = task.x; //xn task_h_2.NextStep(h / 2.0); //из (xn,vn)-> (xn+1/2, vn+1/2) task_h_2.NextStep(h / 2.0); //из (xn+1/2, vn+1/2)-> (xn+1,vn+1=) double ui = Math.Exp(task.x) * u0[0]; double S = 4 * Math.Abs((task_h_2.U[0] - task.U[0]) / 3); //2^2-1, 2-порядок метода//OLP double c1 = S; maxmodolp = Math.Max(c1, maxmodolp); //OLP double c = Math.Abs(task.U[0] - ui); //vi-ui if (c > maxuivi) { maxuivi = c; x1 = task.x; }//vi-ui dataGridView1.Rows[s].Cells[0].Value = s; dataGridView1.Rows[s].Cells[1].Value = task.x;//xn dataGridView1.Rows[s].Cells[2].Value = task.U[0]; //vn dataGridView1.Rows[s].Cells[3].Value = task1.U[0]; //v2n dataGridView1.Rows[s].Cells[4].Value = task.U[0] - task1.U[0]; //vn-v2n dataGridView1.Rows[s].Cells[5].Value = S; s++; SeriesOfPoints_Selective.Points.AddXY(task.x, task.U[0]); } graf_chart1.Series.Add(SeriesOfPoints_Selective); graf_chart1.ChartAreas[0].AxisX.Maximum = task.x + h; //Задаешь максимальные значения координат graf_chart1.ChartAreas[0].AxisY.Maximum = task.U[0] + 0.5; //Задаешь максимальные значения координат graf_chart1.ChartAreas[0].AxisX.Minimum = 0; //Задаешь максимальные значения координат //chart1.ChartAreas[0].AxisX.Interval = 1; // и можешь интервалы настроить по своему усмотрению /////////////////////////////////////////////////////// n_base_1_textBox14.Text = (s - 1).ToString();//n_test_textBox1.Text = (s - 1).ToString(); //max//maxuivi_test_textBox4.Text = maxuivi.ToString();нет точного решения //x_maxuivi_test_textBox9.Text = x1.ToString(); maxOLP_base_1_textBox4.Text = maxmodolp.ToString();//maxmod_olp_test_textBox8.Text = maxmodolp.ToString(); //bxn_test_textBox3.Text = (b_h - task.x).ToString();//double xn = task.x - h; //////////////////////////////////////////////////////// }
private void button2_Click(object sender, EventArgs e) { try { N_max = int.Parse(N_max_test_textBox12.Text); //N_max_base_1_textBox2.Text); u0[0] = double.Parse(u0_test_textBox1.Text); //u0_base_1_textBox11.Text); h = double.Parse(h_test_textBox2.Text); //h_base_1_textBox9.Text); b_h = double.Parse(b_h_test_textBox11.Text); //b_base_1_textBox7.Text); epsilon = double.Parse(epsilon_test_textBox1.Text); delta = double.Parse(delta_test_textBox1.Text); } catch { MessageBox.Show("Некорректные данные"); } dataGridView1.Rows.Clear(); dataGridView1.Columns.Clear(); graf_chart1.Series.Clear(); Series SeriesOfPoints_Selective = new Series("Численное"); SeriesOfPoints_Selective.ChartType = SeriesChartType.Line; SeriesOfPoints_Selective.Color = Color.Red; SeriesOfPoints_Selective.BorderWidth = 1; Series SeriesOfPoints_Selective_Tochnoe = new Series("Точное"); SeriesOfPoints_Selective_Tochnoe.ChartType = SeriesChartType.Line; SeriesOfPoints_Selective_Tochnoe.Color = Color.Green; SeriesOfPoints_Selective_Tochnoe.BorderWidth = 1; dataGridView1.RowCount = N_max + 1; dataGridView1.ColumnCount = 11; dataGridView1.Columns[0].HeaderText = "i"; dataGridView1.Columns[1].HeaderText = "xi"; dataGridView1.Columns[2].HeaderText = "vi"; dataGridView1.Columns[3].HeaderText = "v2i"; dataGridView1.Columns[4].HeaderText = "vi-v2i"; dataGridView1.Columns[5].HeaderText = "ОЛП"; dataGridView1.Columns[6].HeaderText = "hi"; dataGridView1.Columns[7].HeaderText = "C1"; dataGridView1.Columns[8].HeaderText = "C2"; dataGridView1.Columns[9].HeaderText = "ui"; dataGridView1.Columns[10].HeaderText = "|ui-vi|"; dataGridView1.Columns[0].Width = 50; dataGridView1.Columns[7].Width = 50; //dataGridView1.Columns[6].Width = 50; dataGridView1.Columns[8].Width = 50; for (int i = 2; i < 6; i++) { dataGridView1.Columns[i].Width = 160; } dataGridView1.Columns[9].Width = 160; dataGridView1.Columns[10].Width = 160; RightPart_test_task task = new RightPart_test_task(); RightPart_test_task task1 = new RightPart_test_task(); RightPart_test_task task_h_2 = new RightPart_test_task(); task.SetInit(0, u0); //SetInit(double x0, double[] U0, double a_, double b_) task1.SetInit(0, u0); //SetInit(double x0, double[] U0, double a_, double b_) task_h_2.SetInit(0, u0); double x1 = task.x; int s = 1, f = 0; double vn_1 = u0[0], vn2_1 = u0[0], xn_1 = 0; double[] u = new double[N_max + 1]; for (int k = 0; k < N_max; k++) { //dataGridView1.Rows.Add(); int C1 = 0, C2 = 0; if (k == 0) {//НУ //dataGridView1.Rows.Add();//task.x=0, task.U[0]=u0 dataGridView1.Rows[k].Cells[0].Value = 0; dataGridView1.Rows[k].Cells[1].Value = task.x; //xn=x0 dataGridView1.Rows[k].Cells[2].Value = task.U[0]; //vn=u0 dataGridView1.Rows[k].Cells[3].Value = task1.U[0]; //v2n=u0 dataGridView1.Rows[k].Cells[4].Value = task.U[0] - task1.U[0]; //vn-v2n=0 //dataGridView1.Rows[k].Cells[5].Value = 0;//OLP dataGridView1.Rows[k].Cells[6].Value = h; //hi dataGridView1.Rows[k].Cells[7].Value = C1; //c1 dataGridView1.Rows[k].Cells[8].Value = C2; //c2 dataGridView1.Rows[k].Cells[9].Value = Math.Exp(task.x) * u0[0]; //ui dataGridView1.Rows[k].Cells[10].Value = Math.Abs(task.U[0] - Math.Exp(task.x) * u0[0]); //vi-ui u[0] = task.U[0]; //vn=u0 //SeriesOfPoints_Selective.Points.AddXY(0, task.U[0]); //SeriesOfPoints_Selective_Tochnoe.Points.AddXY(0, Math.Exp(task.x) * u0[0]);//ui=Math.Exp(task.x) * u0[0]; } double S1 = 0; while (!(task.x + h - b_h < delta))//h = proverka_h(task.x, h, b_h, delta); { h = h / 2.0; C1++; }////////////////////////////////////////////// if ((task.x < b_h + delta) && (task.x > b_h)) { break; } if (k != 0) { double S = Math.Abs((task_h_2.U[0] - task.U[0]) / 3); //2^2-1, 2-порядок метода S1 = S * 4; if (S < epsilon / 8.0) //(k != 0)) { h = 2 * h; C2++; while (!(task.x + h - b_h < delta))//h = proverka_h(task.x, h, b_h, delta); { h = h / 2.0; C1++; } } if ((S > epsilon) && (k != 0)) { task.x = xn_1; //task.x - h;//xn-1 task.U[0] = vn_1; //(Double)dataGridView1.Rows[s-1].Cells[2].Value; task1.x = xn_1; task1.U[0] = vn2_1; //task.U[0]; s = f; h = h / 2.0; C1++; } } xn_1 = task.x; vn_1 = task.U[0]; vn2_1 = task1.U[0]; f = s; task_h_2.x = task.x; //xn task_h_2.U[0] = task.U[0]; //vn task.NextStep(h); task1.NextStep(h / 2.0); task1.x = task.x; //xn task_h_2.NextStep(h / 2.0); //из (xn,vn)-> (xn+1/2, vn+1/2) task_h_2.NextStep(h / 2.0); //из (xn+1/2, vn+1/2)-> (xn+1,vn+1=) double ui = Math.Exp(task.x) * u0[0]; //if (k != 0) //if (dataGridView1.RowCount == s) // dataGridView1.Rows.Add(); dataGridView1.Rows[s].Cells[0].Value = s; dataGridView1.Rows[s].Cells[1].Value = task.x; //xn dataGridView1.Rows[s].Cells[2].Value = task.U[0]; //vn dataGridView1.Rows[s].Cells[3].Value = task1.U[0]; //v2n dataGridView1.Rows[s].Cells[4].Value = task.U[0] - task1.U[0]; //vn-v2n dataGridView1.Rows[s - 1].Cells[5].Value = S1; dataGridView1.Rows[s].Cells[6].Value = h; //hi dataGridView1.Rows[s].Cells[9].Value = ui; //ui dataGridView1.Rows[s].Cells[10].Value = Math.Abs(task.U[0] - ui); //vi-ui dataGridView1.Rows[s].Cells[7].Value = C1; //c1 dataGridView1.Rows[s].Cells[8].Value = C2; //c2 u[s] = task.U[0]; s++; if (task.x + 0.00000000000001 >= b_h + delta) { break; } //} //SeriesOfPoints_Selective.Points.AddXY(task.x, task.U[0]); //SeriesOfPoints_Selective_Tochnoe.Points.AddXY(task.x, ui);//ui=Math.Exp(task.x) * u0[0]; }//for /////////////////////////////////////////////////////// double Sn = 4 * Math.Abs((task_h_2.U[0] - task.U[0]) / 3);//2^2-1, 2-порядок метода dataGridView1.Rows[s - 1].Cells[5].Value = Sn; double maxmodolp = 0; double maxuivi = 0;//Math.Abs(task.U[0] - Math.Exp(task.x)); double max_h = 0; double min_h = (Double)dataGridView1.Rows[0].Cells[6].Value; double x_minh = 0, x_maxh = 0; for (int i = 0; i < s; i++) //n=s-1 { double x = (Double)dataGridView1.Rows[i].Cells[1].Value; //double u = (Double)dataGridView1.Rows[i].Cells[2].Value;//vn double ui = Math.Exp(x) * u0[0]; SeriesOfPoints_Selective.Points.AddXY(x, u[i]); SeriesOfPoints_Selective_Tochnoe.Points.AddXY(x, ui); //ui=Math.Exp(task.x) * u0[0]; double c = Math.Abs((Double)dataGridView1.Rows[i].Cells[2].Value - u0[0] * Math.Exp((Double)dataGridView1.Rows[i].Cells[1].Value)); //task.U[0] - Math.Exp(task.x));//vi-ui if (c > maxuivi) { maxuivi = c; x1 = (Double)dataGridView1.Rows[i].Cells[1].Value; } double c1 = (Double)dataGridView1.Rows[i].Cells[5].Value; maxmodolp = Math.Max(c1, maxmodolp); ///OLP /*if (i == 0)//OLP * dataGridView1.Rows[i].Cells[5].Value = 0; * else * { * double xi = (Double)dataGridView1.Rows[i].Cells[1].Value;//x * double xi_1 = (Double)dataGridView1.Rows[i - 1].Cells[1].Value; * double vi = (Double)dataGridView1.Rows[i].Cells[2].Value;//v * double vi_1 = (Double)dataGridView1.Rows[i - 1].Cells[2].Value;//vn-1 * double olp = vi_1 * Math.Exp(xi - xi_1) - vi; * dataGridView1.Rows[i].Cells[5].Value = olp;//ОЛП * * double d = Math.Abs(olp); * if (d > maxmodolp) * { * maxmodolp = d; * } * }/////OLP*/ ////h double c2 = (Double)dataGridView1.Rows[i].Cells[6].Value;//hi if (c2 > max_h) { max_h = c2; x_maxh = (Double)dataGridView1.Rows[i].Cells[1].Value;//x } if (c2 < min_h) { min_h = c2; x_minh = (Double)dataGridView1.Rows[i].Cells[1].Value;//x }/////h }//for2 graf_chart1.Series.Add(SeriesOfPoints_Selective); graf_chart1.Series.Add(SeriesOfPoints_Selective_Tochnoe); graf_chart1.ChartAreas[0].AxisX.Maximum = task.x + 0.5; //Задаешь максимальные значения координат graf_chart1.ChartAreas[0].AxisY.Maximum = task.U[0] + 0.5; //Задаешь максимальные значения координат graf_chart1.ChartAreas[0].AxisX.Minimum = 0; //Задаешь максимальные значения координат //dataGridView1.RowCount = s+1;//обрезали лишние пустые строчки в таблице n_test_textBox1.Text = (s - 1).ToString(); maxuivi_test_textBox4.Text = maxuivi.ToString(); x_maxuivi_test_textBox9.Text = x1.ToString(); maxmod_olp_test_textBox8.Text = maxmodolp.ToString(); bxn_test_textBox3.Text = (b_h - task.x).ToString();//double xn = task.x - h; max_h_test_textBox6.Text = max_h.ToString(); min_h_test_textBox5.Text = min_h.ToString(); x_minh_test_textBox10.Text = x_minh.ToString(); x_maxh_test_textBox3.Text = x_maxh.ToString(); //////////////////////////////////////////////////////// }