public void LdlDecompLinearSystemAlgorithm_RunTest() { var domain = new IntegerDomain(); var fractionField = new FractionField <int>(domain); var decompositionAlg = new TriangDiagSymmMatrixDecomposition <Fraction <int> >( fractionField); var symmDecompSolver = new SymmetricLdlDecompLinearSystemAlgorithm <Fraction <int> >( decompositionAlg); var target = new LdlDecompLinearSystemAlgorithm <Fraction <int> >( symmDecompSolver, fractionField); var matrix = this.GetGeneralMatrix(domain); var vector = this.GetIndVectorForGenMatrix(domain); var actual = target.Run(matrix, vector); var lines = matrix.GetLength(0); var columns = matrix.GetLength(1); var nullVector = new ZeroVector <Fraction <int> >(lines, fractionField); var expectedVector = new ArrayMathVector <Fraction <int> >(lines); for (var i = 0; i < lines; ++i) { expectedVector[i] = vector[i, 0]; } actual = target.Run(matrix, vector); this.AssertVector(expectedVector, matrix, actual.Vector, fractionField); for (var i = 0; i < actual.VectorSpaceBasis.Count; ++i) { var vec = actual.VectorSpaceBasis[i]; this.AssertVector(nullVector, matrix, vec, fractionField); } }
public void SymmetricLdlDecompLinearSystemAlgorithm_RunTest() { var domain = new IntegerDomain(); var fractionField = new FractionField <int>(domain); var decompositionAlg = new TriangDiagSymmMatrixDecomposition <Fraction <int> >( fractionField); var target = new SymmetricLdlDecompLinearSystemAlgorithm <Fraction <int> >( decompositionAlg); var matrix = this.GetSingularMatrix(domain); var vector = this.GetZeroFilledVector(domain); var actual = target.Run(matrix, vector); // Teste à característica da matriz Assert.AreEqual(2, actual.VectorSpaceBasis.Count); // Teste ao vector independente var size = matrix.GetLength(0); var nullVector = new ZeroVector <Fraction <int> >(size, fractionField); this.AssertVector(nullVector, matrix, actual.Vector, fractionField); // Teste aos vectores da base for (var i = 0; i < actual.VectorSpaceBasis.Count; ++i) { var vec = actual.VectorSpaceBasis[i]; this.AssertVector(nullVector, matrix, vec, fractionField); } // Teste à matriz com vector independente vector = this.GetIndtVectorForSingularMatrix(domain); var expectedVector = new ArrayMathVector <Fraction <int> >(size); for (var i = 0; i < size; ++i) { expectedVector[i] = vector[i, 0]; } actual = target.Run(matrix, vector); this.AssertVector(expectedVector, matrix, actual.Vector, fractionField); for (var i = 0; i < actual.VectorSpaceBasis.Count; ++i) { var vec = actual.VectorSpaceBasis[i]; this.AssertVector(nullVector, matrix, vec, fractionField); } }