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