void InitMainDifferenceTable(int nrows, int ncolumns, ref DirichletTask task, ref DirichletTask task2) { for (int i = 1; i < nrows - 1; i++) { for (int j = 2; j < ncolumns; j++) { int ii = Convert.ToInt32(dataGridView1.Columns[j].Name); int jj = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value); dataGridView1.Rows[i].Cells[j].Value = Math.Abs(task2.GetValue(2 * ii, 2 * jj) - task.GetValue(ii, jj)); } } }
void InitVTable(int nrows, int ncolumns, ref DirichletTask task) { for (int i = 1; i < nrows - 1; i++) { for (int j = 2; j < ncolumns; j++) { int ii = Convert.ToInt32(dataGridView1.Columns[j].Name); int jj = Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value); dataGridView1.Rows[i].Cells[j].Value = task.GetValue(ii, jj); } } }
double CalculateMainError(ref DirichletTask task, ref DirichletTask task2, ref int iTotalEps, ref int jTotalEps) { double maxError = -1e100; for (int i = 1, j = 1; i < n && j < m; task.GetNextInnerXYIndex(ref i, ref j)) { double currError = Math.Abs(task2.GetValue(2 * i, 2 * j) - task.GetValue(i, j)); if (currError > maxError) { maxError = currError; iTotalEps = i; jTotalEps = j; } } return(maxError); }
private void МетодСопряженногоГрадиентаToolStripMenuItem_Click(object sender, EventArgs e) { InitMethodParameters(); istest = true; isrectangle = true; task = new TestTaskRectangle(a, b, c, d, n, m, eps, nmax, initApprx); task.ConjugateGradientMethod(); int iTotalEps = -1, jTotalEps = -1; double maxError = CalculateTestError(ref task, ref iTotalEps, ref jTotalEps); double xTotalEps = a + iTotalEps * (b - a) / n; double yTotalEps = c + jTotalEps * (d - c) / m; double rmax = task.RMax(); double r2 = task.R2(); WriteResults(istest, maxError, iTotalEps, jTotalEps, xTotalEps, yTotalEps, task.epsMax, task.countSteps, rmax, r2); }
private void МетодВерхнейРелаксацииToolStripMenuItem_Click(object sender, EventArgs e) { InitMethodParameters(); istest = true; isrectangle = true; task = new TestTaskRectangle(a, b, c, d, n, m, eps, nmax, initApprx, w); task.OverRelaxationMethod(); int iTotalEps = -1, jTotalEps = -1; double maxError = CalculateTestError(ref task, ref iTotalEps, ref jTotalEps); double xTotalEps = a + iTotalEps * (b - a) / n; double yTotalEps = c + jTotalEps * (d - c) / m; double rmax = task.RMax(); double r2 = task.R2(); WriteResults(istest, maxError, iTotalEps, jTotalEps, xTotalEps, yTotalEps, task.epsMax, task.countSteps, rmax, r2); str_w.Text = task.w.ToString(); }
private void ТестоваяЗадачаНаНепрямоугольнойОбластиToolStripMenuItem_Click(object sender, EventArgs e) { InitMethodParameters(); istest = true; isrectangle = false; task = new TestTaskRectangleWithHole(a, b, c, d, n, m, eps, nmax, initApprx); task.ConjugateGradientMethod(); int nrows = m + 2; int ncolumns = n + 3; int iTotalEps = -1, jTotalEps = -1; double maxError = CalculateTestError(ref task, ref iTotalEps, ref jTotalEps); double xTotalEps = a + iTotalEps * (b - a) / n; double yTotalEps = c + jTotalEps * (d - c) / m; double rmax = task.RMax(); double r2 = task.R2(); WriteResults(istest, maxError, iTotalEps, jTotalEps, xTotalEps, yTotalEps, task.epsMax, task.countSteps, rmax, r2); }
private void методСопряженныхГрадиентовToolStripMenuItem_Click(object sender, EventArgs e) { InitMethodParameters(); istest = false; isrectangle = true; task = new MainTaskRectangle(a, b, c, d, n, m, eps, nmax, initApprx, w); task2 = new MainTaskRectangle(a, b, c, d, 2 * n, 2 * m, eps, nmax, initApprx, w); task.ConjugateGradientMethod(); task2.ConjugateGradientMethod(); int iTotalEps = -1, jTotalEps = -1; double maxError = CalculateMainError(ref task, ref task2, ref iTotalEps, ref jTotalEps); double xTotalEps = a + iTotalEps * (b - a) / n; double yTotalEps = c + jTotalEps * (d - c) / m; double rmax = task.RMax(); double rmax2 = task2.RMax(); double r2 = task.R2(); double r22 = task2.R2(); WriteResults(istest, maxError, iTotalEps, jTotalEps, xTotalEps, yTotalEps, task.epsMax, task.countSteps, rmax, r2, rmax2, r22); str_w.Text = task.w.ToString(); }
private void МетодМинимальныхНевязокToolStripMenuItem1_Click(object sender, EventArgs e) { InitMethodParameters(); istest = false; isrectangle = true; task = new MainTaskRectangle(a, b, c, d, n, m, eps, nmax, initApprx); task2 = new MainTaskRectangle(a, b, c, d, 2 * n, 2 * m, eps, nmax, initApprx); task.MinimumResidualsMethod(); task2.MinimumResidualsMethod(); int iTotalEps = -1, jTotalEps = -1; double maxError = CalculateMainError(ref task, ref task2, ref iTotalEps, ref jTotalEps); double xTotalEps = a + iTotalEps * (b - a) / n; double yTotalEps = c + jTotalEps * (d - c) / m; double rmax = task.RMax(); double rmax2 = task2.RMax(); double r2 = task.R2(); double r22 = task2.R2(); WriteResults(istest, maxError, iTotalEps, jTotalEps, xTotalEps, yTotalEps, task.epsMax, task.countSteps, rmax, r2, rmax2, r22); str_w.Text = task.w.ToString(); }