Пример #1
0
        private void RunRandomMatrices()
        {
            const int maxSize  = 200;
            const int maxCount = 5;

            int failcount = 0;

            using (StreamWriter w = new StreamWriter("random.txt"))
            {
                for (int size = 2; size < maxSize; size++)
                {
                    Console.WriteLine("Testing size {0}...", size);

                    for (int degeneracy = 1; degeneracy < size; degeneracy++)
                    {
                        Console.Write("Testing degeneracy {0}...", degeneracy);

                        int totalIter = 0;

                        for (int count = 0; count < maxCount; count++)
                        {
                            for (int near = 0; near <= 1; near++)
                            {
                                Matrix H, ev, vec;
                                CreateRandomMatrix(out H, out ev, out vec, size, degeneracy, near);

                                MatrixTestCase test = new MatrixTestCase();
                                test.Eigenvalues  = ev;
                                test.Eigenvectors = vec;
                                test.Matrix       = H;

                                try
                                {
                                    RunMatrixTestCase(test, false);
                                    totalIter += ERY.EMath.MatrixDiagonalizers.BuiltInDiagonalizer.lastDiagonalIter;
                                }
                                catch
                                {
                                    SaveFailedTestCase(w, test);
                                    failcount++;
                                }
                            }
                        }

                        double avg = totalIter / (double)maxCount;

                        Console.WriteLine(" average {0} iterations.", avg);
                    }
                }
            }

            Console.WriteLine();
            Console.WriteLine("Failed: {0}", failcount);
        }
Пример #2
0
        private void RunMatrixTestCase(MatrixTestCase m, bool verbose)
        {
            if (verbose)
            {
                Console.WriteLine("Matrix:\n{0}", m.Matrix.ToString("0.000"));
            }

            Matrix eigenvals, eigenvecs;

            m.Matrix.EigenValsVecs(out eigenvals, out eigenvecs);

            CheckEigenvectorDifference(eigenvals, eigenvecs, m.Eigenvalues, m.Eigenvectors);
        }
Пример #3
0
        private void SaveFailedTestCase(StreamWriter w, MatrixTestCase test)
        {
            w.WriteLine("Matrix:");
            w.WriteLine("{0} {1}", test.Matrix.Rows, test.Matrix.Columns);

            WriteTestCaseMatrix(w, test.Matrix);

            w.WriteLine("Eigenvalues:");
            for (int i = 0; i < test.Eigenvalues.Rows; i++)
            {
                w.WriteLine("    {0}", test.Eigenvalues[i, 0].RealPart);
            }

            w.WriteLine("Eigenvectors:");
            WriteTestCaseMatrix(w, test.Eigenvectors);
        }
Пример #4
0
        private IEnumerable <MatrixTestCase> GetMatrixTestCases()
        {
            string source = Resources.Matrices;

            string[] lines = source.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

            int index = 0;

            while (index < lines.Length)
            {
                if (lines[index] == "Matrix:")
                {
                    index++;
                    int[] size = SplitOnSpace(lines[index]).Select <string, int>(int.Parse).ToArray();

                    Matrix retval = ReadMatrix(lines, ref index, size[0], size[1]);
                    index++;
                    Matrix eigenvalues = ReadMatrix(lines, ref index, size[0], 1);
                    index++;
                    Matrix eigenvectors = ReadMatrix(lines, ref index, size[0], size[1]);

                    MatrixTestCase test = new MatrixTestCase();
                    test.Matrix       = retval;
                    test.Eigenvalues  = eigenvalues;
                    test.Eigenvectors = eigenvectors;

                    AssertEigenvectorsOrthoNormal(test.Eigenvectors);

                    yield return(test);
                }
                else if (string.IsNullOrEmpty(lines[index]) == false)
                {
                    throw new Exception();
                }

                index++;
            }
        }
Пример #5
0
        private void SaveFailedTestCase(StreamWriter w, MatrixTestCase test)
        {
            w.WriteLine("Matrix:");
            w.WriteLine("{0} {1}", test.Matrix.Rows, test.Matrix.Columns);

            WriteTestCaseMatrix(w, test.Matrix);

            w.WriteLine("Eigenvalues:");
            for (int i = 0; i < test.Eigenvalues.Rows; i++)
            {
                w.WriteLine("    {0}", test.Eigenvalues[i, 0].RealPart);
            }

            w.WriteLine("Eigenvectors:");
            WriteTestCaseMatrix(w, test.Eigenvectors);
        }
Пример #6
0
        private void RunRandomMatrices()
        {
            const int maxSize = 200;
            const int maxCount = 5;

            int failcount = 0;

            using (StreamWriter w = new StreamWriter("random.txt"))
            {
                for (int size = 2; size < maxSize; size++)
                {
                    Console.WriteLine("Testing size {0}...", size);

                    for (int degeneracy = 1; degeneracy < size; degeneracy++)
                    {
                        Console.Write("Testing degeneracy {0}...", degeneracy);

                        int totalIter = 0;

                        for (int count = 0; count < maxCount; count++)
                        {
                            for (int near = 0; near <= 1; near++)
                            {
                                Matrix H, ev, vec;
                                CreateRandomMatrix(out H, out ev, out vec, size, degeneracy, near);

                                MatrixTestCase test = new MatrixTestCase();
                                test.Eigenvalues = ev;
                                test.Eigenvectors = vec;
                                test.Matrix = H;

                                try
                                {
                                    RunMatrixTestCase(test, false);
                                    totalIter += ERY.EMath.MatrixDiagonalizers.BuiltInDiagonalizer.lastDiagonalIter;
                                }
                                catch
                                {
                                    SaveFailedTestCase(w, test);
                                    failcount++;
                                }
                            }
                        }

                        double avg = totalIter / (double)maxCount;

                        Console.WriteLine(" average {0} iterations.", avg);
                    }
                }
            }

            Console.WriteLine();
            Console.WriteLine("Failed: {0}", failcount);
        }
Пример #7
0
        private void RunMatrixTestCase(MatrixTestCase m, bool verbose)
        {
            if (verbose)
                Console.WriteLine("Matrix:\n{0}", m.Matrix.ToString("0.000"));

            Matrix eigenvals, eigenvecs;
            m.Matrix.EigenValsVecs(out eigenvals, out eigenvecs);

            CheckEigenvectorDifference(eigenvals, eigenvecs, m.Eigenvalues, m.Eigenvectors);
        }
Пример #8
0
        private IEnumerable<MatrixTestCase> GetMatrixTestCases()
        {
            string source = Resources.Matrices;

            string[] lines = source.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);

            int index = 0;
            while (index < lines.Length)
            {
                if (lines[index] == "Matrix:")
                {
                    index++;
                    int[] size = SplitOnSpace(lines[index]).Select<string, int>(int.Parse).ToArray();

                    Matrix retval = ReadMatrix(lines, ref index, size[0], size[1]);
                    index++;
                    Matrix eigenvalues = ReadMatrix(lines, ref index, size[0], 1);
                    index++;
                    Matrix eigenvectors = ReadMatrix(lines, ref index, size[0], size[1]);

                    MatrixTestCase test = new MatrixTestCase();
                    test.Matrix = retval;
                    test.Eigenvalues = eigenvalues;
                    test.Eigenvectors = eigenvectors;

                    AssertEigenvectorsOrthoNormal(test.Eigenvectors);

                    yield return test;
                }
                else if (string.IsNullOrEmpty(lines[index]) == false)
                    throw new Exception();

                index++;
            }
        }