From 23bf5c8053dc9956393ee590ee823eea4cda577e Mon Sep 17 00:00:00 2001 From: Jong Hyun Kim Date: Sun, 3 May 2020 18:31:53 +0900 Subject: [PATCH] Sparse Solver: Delete Experimental. --- src/Numerics/Providers/Experimental.cs | 439 ------------------------- 1 file changed, 439 deletions(-) delete mode 100644 src/Numerics/Providers/Experimental.cs diff --git a/src/Numerics/Providers/Experimental.cs b/src/Numerics/Providers/Experimental.cs deleted file mode 100644 index 7d4231c9..00000000 --- a/src/Numerics/Providers/Experimental.cs +++ /dev/null @@ -1,439 +0,0 @@ -using MathNet.Numerics.LinearAlgebra; -using MathNet.Numerics.LinearAlgebra.Storage; -using MathNet.Numerics.Properties; -using MathNet.Numerics.Providers.SparseSolver; -using System; - -namespace MathNet.Numerics -{ - using Complex = System.Numerics.Complex; - - public static class Experimental - { - public static DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, float[] values, - int nRhs, float[] rhs, float[] solution) - { - return SparseSolverControl.Provider.Solve(matrixStructure, matrixType, systemType, - rowCount, columnCount, nonZerosCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - } - - public static DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, double[] values, - int nRhs, double[] rhs, double[] solution) - { - return SparseSolverControl.Provider.Solve(matrixStructure, matrixType, systemType, - rowCount, columnCount, nonZerosCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - } - - public static DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, Complex32[] values, - int nRhs, Complex32[] rhs, Complex32[] solution) - { - return SparseSolverControl.Provider.Solve(matrixStructure, matrixType, systemType, - rowCount, columnCount, nonZerosCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - } - - public static DssStatus Solve(DssMatrixStructure matrixStructure, DssMatrixType matrixType, DssSystemType systemType, - int rowCount, int columnCount, int nonZerosCount, int[] rowPointers, int[] columnIndices, Complex[] values, - int nRhs, Complex[] rhs, Complex[] solution) - { - return SparseSolverControl.Provider.Solve(matrixStructure, matrixType, systemType, - rowCount, columnCount, nonZerosCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - } - - // solve A x = b - // The symmetricity or definiteness of A is not checked. - - public static DssStatus Solve(this Matrix matrix, Vector input, Vector result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - if (result.Count != input.Count) - { - throw new ArgumentException(Resources.ArgumentVectorsSameLength); - } - if (input.Count != matrix.RowCount) - { - throw LinearAlgebra.Single.Matrix.DimensionsDontMatch(input, matrix); - } - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, for example, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var rhs = input.ToArray(); - var solution = new float[rowCount]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - 1, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result.SetValues(solution); - - return error; - } - - public static DssStatus Solve(this Matrix matrix, Vector input, Vector result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - - if (result.Count != input.Count) - { - throw new ArgumentException(Resources.ArgumentVectorsSameLength); - } - - if (input.Count != matrix.RowCount) - { - throw LinearAlgebra.Double.Matrix.DimensionsDontMatch(input, matrix); - } - - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var rhs = input.ToArray(); - var solution = new double[rowCount]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - 1, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result.SetValues(solution); - - return error; - } - - public static DssStatus Solve(this Matrix matrix, Vector input, Vector result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - - if (result.Count != input.Count) - { - throw new ArgumentException(Resources.ArgumentVectorsSameLength); - } - - if (input.Count != matrix.RowCount) - { - throw MathNet.Numerics.LinearAlgebra.Complex32.Matrix.DimensionsDontMatch(input, matrix); - } - - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var rhs = input.ToArray(); - var solution = new Complex32[rowCount]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - 1, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result.SetValues(solution); - - return error; - } - - public static DssStatus Solve(this Matrix matrix, Vector input, Vector result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - - if (result.Count != input.Count) - { - throw new ArgumentException(Resources.ArgumentVectorsSameLength); - } - - if (input.Count != matrix.RowCount) - { - throw LinearAlgebra.Complex.Matrix.DimensionsDontMatch(input, matrix); - } - - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var rhs = input.ToArray(); - var solution = new Complex[rowCount]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - 1, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result.SetValues(solution); - - return error; - } - - // Solve A X = B - // The symmetricity or definiteness of A is not checked. - - public static DssStatus Solve(this Matrix matrix, Matrix input, Matrix result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - if (result.ColumnCount != input.ColumnCount || result.RowCount != input.RowCount) - { - throw LinearAlgebra.Single.Matrix.DimensionsDontMatch(input, result); - } - if (input.RowCount != matrix.RowCount) - { - throw LinearAlgebra.Single.Matrix.DimensionsDontMatch(input, matrix); - } - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, for example, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var nRhs = input.ColumnCount; - var rhs = new float[rowCount * nRhs]; - Array.Copy(input.ToColumnMajorArray(), rhs, rhs.Length); - - var solution = new float[rowCount * nRhs]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result = Matrix.Build.DenseOfColumnMajor(rowCount, nRhs, solution); - - return error; - } - - public static DssStatus Solve(this Matrix matrix, Matrix input, Matrix result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - if (result.ColumnCount != input.ColumnCount || result.RowCount != input.RowCount) - { - throw LinearAlgebra.Double.Matrix.DimensionsDontMatch(input, result); - } - if (input.RowCount != matrix.RowCount) - { - throw LinearAlgebra.Double.Matrix.DimensionsDontMatch(input, matrix); - } - - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var nRhs = input.ColumnCount; - var rhs = new double[rowCount * nRhs]; - Array.Copy(input.ToColumnMajorArray(), rhs, rhs.Length); - - var solution = new double[rowCount * nRhs]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result = Matrix.Build.DenseOfColumnMajor(rowCount, nRhs, solution); - - return error; - } - - public static DssStatus Solve(this Matrix matrix, Matrix input, Matrix result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - if (result.ColumnCount != input.ColumnCount || result.RowCount != input.RowCount) - { - throw LinearAlgebra.Complex32.Matrix.DimensionsDontMatch(input, result); - } - if (input.RowCount != matrix.RowCount) - { - throw LinearAlgebra.Complex32.Matrix.DimensionsDontMatch(input, matrix); - } - - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var nRhs = input.ColumnCount; - var rhs = new Complex32[rowCount * nRhs]; - Array.Copy(input.ToColumnMajorArray(), rhs, rhs.Length); - - var solution = new Complex32[rowCount * nRhs]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result = Matrix.Build.DenseOfColumnMajor(rowCount, nRhs, solution); - - return error; - } - - public static DssStatus Solve(this Matrix matrix, Matrix input, Matrix result) - { - if (matrix.RowCount != matrix.ColumnCount) - { - throw new ArgumentException(Resources.ArgumentMatrixSquare, nameof(matrix)); - } - if (result.ColumnCount != input.ColumnCount || result.RowCount != input.RowCount) - { - throw LinearAlgebra.Complex.Matrix.DimensionsDontMatch(input, result); - } - if (input.RowCount != matrix.RowCount) - { - throw LinearAlgebra.Complex.Matrix.DimensionsDontMatch(input, matrix); - } - - var csr = matrix.Storage as SparseCompressedRowMatrixStorage; - if (csr == null) - { - throw new ArgumentException(Resources.MatrixMustBeSparse, nameof(matrix)); - } - - // No diagonal element can be omitted from the values array. - // If there is a zero value on the diagonal, that element nonetheless must be explicitly represented. - csr.PopulateExplicitZerosOnDiagonal(); - - var rowCount = csr.RowCount; - var columnCount = csr.ColumnCount; - var valueCount = csr.ValueCount; - - var values = csr.Values; - var rowPointers = csr.RowPointers; - var columnIndices = csr.ColumnIndices; - - var nRhs = input.ColumnCount; - var rhs = new Complex[rowCount * nRhs]; - Array.Copy(input.ToColumnMajorArray(), rhs, rhs.Length); - - var solution = new Complex[rowCount * nRhs]; - - var error = SparseSolverControl.Provider.Solve(DssMatrixStructure.Nonsymmetric, DssMatrixType.Indefinite, DssSystemType.DontTranspose, - rowCount, columnCount, valueCount, rowPointers, columnIndices, values, - nRhs, rhs, solution); - - if (error == DssStatus.MKL_DSS_SUCCESS) - result = Matrix.Build.DenseOfColumnMajor(rowCount, nRhs, solution); - - return error; - } - } -}