set_autotest() public method

public set_autotest ( bool flag ) : void
flag bool
return void
Exemplo n.º 1
0
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F2)
            {
                int i, n, iter;
                Vector Initial;
                ISolver solver;
                IPreconditioner<DisperseMatrix> preconditioner = new DispersePreconditioner();
                double eps;

                if (System.IO.File.Exists("./auto/info.txt"))
                {
                    string[] lines = System.IO.File.ReadAllLines("./auto/info.txt");
                    n = Int32.Parse(lines[0]);

                    for (i = 1; i <= n; i++)
                    {
                        eps = 1e-16;
                        Data.matrixformat = 3;
                        Data.matrixPath = "./auto/m" + i + ".txt";
                        Data.rightpartPath = "./auto/r" + i + ".txt";
                        System.IO.Directory.CreateDirectory("./auto/ans");
                        preconditioner.set_autotest(true);

                        if ((System.IO.File.Exists(Data.matrixPath)) && (System.IO.File.Exists(Data.rightpartPath)))
                        {
                            Slae<DisperseMatrix> SLAE = new Slae<DisperseMatrix>();
                            SLAE.Matrix = new DisperseMatrix(Data.matrixPath);
                            SLAE.RightPart = new Vector(Data.rightpartPath);
                            Initial = new Vector(SLAE.Matrix.getMatrix().N);

                            if ((SLAE.Matrix.getMatrix().N == 0) || (SLAE.RightPart.SIZE == 0) || (Initial.SIZE == 0))
                            {
                                MessageBox.Show("Размерность матрицы/вектора правой части/вектора приближения равна нулю.\nОшибка ввода матрицы.", "Ошибка.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                continue;
                            }

                            if ((SLAE.Matrix.getMatrix().N != SLAE.RightPart.SIZE) || (SLAE.Matrix.getMatrix().N != Initial.SIZE))
                            {
                                MessageBox.Show("Размерности матрицы/вектора правой части/вектора приближения не совпадают.", "Ошибка.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                continue;
                            }

                            if (SLAE.Matrix.getMatrix().N <= 1000) iter = 20000;
                            else iter = 2000;

                            if (SLAE.Matrix.CheckSymmetry())
                            {
                                Data.preconditioner = 0;
                                solver = new MSG();
                                solver.set_autotest(true);
                                Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                solver.set_autotest(false);
                                InputOutput.OutputVector("./auto/ans/x" + i + " MSG.txt", Data.result);

                                Data.preconditioner = 1;
                                if (preconditioner.createDiag(SLAE))
                                {
                                    solver = new MSG();
                                    solver.set_autotest(true);
                                    Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                    solver.set_autotest(false);
                                    if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " MSG_DIAG.txt", Data.result);
                                }

                                Data.preconditioner = 2;
                                if (preconditioner.createLLT(SLAE))
                                {
                                    solver = new MSG();
                                    solver.set_autotest(true);
                                    Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                    solver.set_autotest(false);
                                    if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " MSG_LLT.txt", Data.result);
                                }

                                Data.preconditioner = 3;
                                if (preconditioner.createLU(SLAE))
                                {
                                    solver = new MSG();
                                    solver.set_autotest(true);
                                    Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                    solver.set_autotest(false);
                                    if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " MSG_LU.txt", Data.result);
                                }

                                Data.preconditioner = 4;
                                if (preconditioner.createLUsq(SLAE))
                                {
                                    solver = new MSG();
                                    solver.set_autotest(true);
                                    Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                    solver.set_autotest(false);
                                    if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " MSG_LUsq.txt", Data.result);
                                }
                            }

                            Data.preconditioner = 0;
                            solver = new LOS();
                            solver.set_autotest(true);
                            Data.result = solver.Solve(SLAE, Initial, iter, eps);
                            solver.set_autotest(false);
                            if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " LOS.txt", Data.result);

                            Data.preconditioner = 1;
                            if (preconditioner.createDiag(SLAE))
                            {
                                solver = new LOS();
                                solver.set_autotest(true);
                                Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                solver.set_autotest(false);
                                if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " LOS_DIAG.txt", Data.result);
                            }

                            if (SLAE.Matrix.CheckSymmetry())
                            {
                                Data.preconditioner = 2;
                                if (preconditioner.createLLT(SLAE))
                                {
                                    solver = new LOS();
                                    solver.set_autotest(true);
                                    Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                    solver.set_autotest(false);
                                    if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " LOS_LLT.txt", Data.result);
                                }
                            }

                            Data.preconditioner = 3;
                            if (preconditioner.createLU(SLAE))
                            {
                                solver = new LOS();
                                solver.set_autotest(true);
                                Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                solver.set_autotest(false);
                                if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " LOS_LU.txt", Data.result);
                            }

                            Data.preconditioner = 4;
                            if (preconditioner.createLUsq(SLAE))
                            {
                                solver = new LOS();
                                solver.set_autotest(true);
                                Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                solver.set_autotest(false);
                                if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " LOS_LUsq.txt", Data.result);
                            }

                            Data.preconditioner = 0;
                            solver = new BSGstab();
                            solver.set_autotest(true);
                            Data.result = solver.Solve(SLAE, Initial, iter, eps);
                            solver.set_autotest(false);
                            if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " BSGStab.txt", Data.result);

                            if (SLAE.Matrix.getMatrix().N < 50)
                            {
                                solver = new GaussZeidel();
                                solver.set_autotest(true);
                                Data.result = solver.Solve(SLAE, Initial, iter, eps);
                                solver.set_autotest(false);
                                if (Data.result != null) InputOutput.OutputVector("./auto/ans/x" + i + " GaussZeidel.txt", Data.result);
                            }

                            preconditioner.set_autotest(false);

                            if (i % (n / 10) == 0) MessageBox.Show("Матрица " + i + " протестирована.", "OK.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            MessageBox.Show("Матрица " + i + " потеряна.", "OK.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                    MessageBox.Show("Автотестирование завершено.", "OK.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Потерялся файл /auto/info.txt\n", "Ошибка.", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }