public void FactorizationWithZeros4dim() { int[] rows = new int[] { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3 }; int[] collumns = new int[] { 0, 1, 0, 1, 2, 1, 2, 3, 2, 3 }; double[] values = new double[] { 100, 10, 10, 101, 20, 20, 104, 30, 30, 109 }; FA = new CoordinationalMatrix(rows, collumns, values, 4); IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA); var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1, 1 })); double[] resultActual = new double[] { 10, 11, 12, 13 }; for (int i = 0; i < result.Size; i++) { Assert.Equal(result[i], resultActual[i], 8); } }
public static IFactorization SpawnFactorization(FactorizersEnum factorizer, CoordinationalMatrix M) { IFactorization factorization; switch (factorizer) { case FactorizersEnum.IncompleteCholesky: return(factorization = new IncompleteCholesky(M)); case FactorizersEnum.IncompleteLU: return(factorization = new IncompleteLU(M)); case FactorizersEnum.IncompleteLUsq: return(factorization = new IncompleteLUsq(M)); case FactorizersEnum.DiagonalFactorization: return(factorization = new DioganalFactorization(M)); case FactorizersEnum.SimpleFactorization: return(factorization = new SimpleFactorization(M)); case FactorizersEnum.WithoutFactorization: return(factorization = null); default: return(null); } }
public void Factorization() { IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA); var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1 })); double[] resultActual = new double[] { Math.Sqrt(10), Math.Sqrt(10) / 10 + 3 * Math.Sqrt(110) / 10, Math.Sqrt(10) / 5 + 14 * Math.Sqrt(110) / 165 + 2 * Math.Sqrt(2398) / 33 }; for (int i = 0; i < result.Size; i++) { Assert.Equal(result[i], resultActual[i], 8); } }
public void FactorizationDiag() { int[] rows = new int[] { 0, 1, 2 }; int[] collumns = new int[] { 0, 1, 2 }; double[] values = new double[] { 10, 5, 7 }; FA = new CoordinationalMatrix(rows, collumns, values, 3); IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA); var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1 })); double[] resultActual = new double[] { Math.Sqrt(10), Math.Sqrt(5), Math.Sqrt(7) }; for (int i = 0; i < result.Size; i++) { Assert.Equal(result[i], resultActual[i], 8); } }
public void FactorizationWithZeros() { int[] rows = new int[] { 0, 0, 1, 1, 1, 2, 2 }; int[] collumns = new int[] { 0, 1, 0, 1, 2, 1, 2 }; double[] values = new double[] { 10, 1, 1, 10, 2, 2, 10 }; FA = new CoordinationalMatrix(rows, collumns, values, 3); IncompleteCholesky incompleteCholesky = new IncompleteCholesky(FA); var result = incompleteCholesky.LMult(new Vector(new double[] { 1, 1, 1 })); double[] resultActual = new double[] { Math.Sqrt(10), Math.Sqrt(10) / 10 + 3 * Math.Sqrt(110) / 10, 2 * Math.Sqrt(110) / 33 + 5 * Math.Sqrt(418) / 33, }; for (int i = 0; i < result.Size; i++) { Assert.Equal(result[i], resultActual[i], 8); } }