示例#1
0
 public static extern CholmodDense SuiteSparseQR_C_backslash
 (
     int ordering,
     double tol,
     ref CholmodSparse A,
     ref CholmodDense B,
     ref CholmodCommon cc
 );
示例#2
0
 public static extern IntPtr SuiteSparseQR_C_qmult /* returns Y, or NULL on failure */
 (
     /* inputs: */
     int method,
     IntPtr QR,
     ref CholmodDense X,
     ref CholmodCommon cc
 );
示例#3
0
        public static DenseColumnMajorStorage <Complex> GetDenseMatrix(CholmodDense dense, ref double[] buffer)
        {
            int rows    = (int)dense.nrow;
            int columns = (int)dense.ncol;

            var matrix = new DenseMatrix(rows, columns);

            CopyArray(2 * (int)dense.nzmax, dense.x, matrix.Values, ref buffer);

            return(matrix);
        }
示例#4
0
        public static DenseColumnMajorStorage <double> GetDenseMatrix(CholmodDense dense)
        {
            int rows    = (int)dense.nrow;
            int columns = (int)dense.ncol;

            var matrix = new DenseMatrix(rows, columns);

            Marshal.Copy(dense.x, matrix.Values, 0, rows * columns);

            return(matrix);
        }
示例#5
0
        protected override CholmodDense CreateDense(DenseColumnMajorStorage <Complex> matrix, List <GCHandle> handles)
        {
            var A = new CholmodDense();

            A.nrow  = (uint)matrix.RowCount;
            A.ncol  = (uint)matrix.ColumnCount;
            A.nzmax = (uint)(matrix.RowCount * matrix.ColumnCount);

            A.dtype = Dtype.Double;
            A.xtype = Xtype.Real;

            A.x = InteropHelper.Pin(matrix.Values, handles);
            A.z = IntPtr.Zero;
            A.d = (uint)matrix.RowCount; // TODO: cholmod_dense leading dimension?

            return(A);
        }
示例#6
0
        protected override void CopyDense(CholmodDense dense, DenseColumnMajorStorage <Complex> matrix)
        {
            int count = 2 * (int)dense.nzmax;

            if (tempStorage == null)
            {
                tempStorage = new double[count];
            }

            Marshal.Copy(dense.x, tempStorage, 0, count);

            var values = matrix.Values;

            count = count / 2;

            for (int i = 0; i < count; i++)
            {
                values[i] = new Complex(tempStorage[2 * i], tempStorage[2 * i + 1]);
            }
        }
示例#7
0
 public static extern sp_long SuiteSparseQR_C
 (
     /* inputs: */
     int ordering,
     double tol,
     sp_long econ,
     int getCTX,
     ref CholmodSparse A,
     IntPtr Bsparse, // ref CholmodSparse
     ref CholmodDense Bdense,
     /* outputs: */
     out IntPtr Zsparse,  // CholmodSparse
     out IntPtr Zdense,   // CholmodDense
     out IntPtr R,        // CholmodSparse
     out IntPtr E,        // SuiteSparse_long[]
     out IntPtr H,        // CholmodSparse
     out IntPtr HPinv,    // SuiteSparse_long[]
     out IntPtr HTau,     // CholmodDense
     ref CholmodCommon cc //
 );
示例#8
0
 public static extern CholmodDense SuiteSparseQR_C_backslash_default
 (
     ref CholmodSparse A,
     ref CholmodDense B,
     ref CholmodCommon cc
 );
示例#9
0
 protected override void CopyDense(CholmodDense dense, DenseColumnMajorStorage <Complex> matrix)
 {
     CholmodHelper.CopyArray(2 * (int)dense.nzmax, dense.x, matrix.Values, ref buffer);
 }
示例#10
0
 protected override void CopyDense(CholmodDense dense, DenseColumnMajorStorage <double> matrix)
 {
     Marshal.Copy(dense.x, matrix.Values, 0, (int)dense.nzmax);
 }
示例#11
0
 /// <summary>
 /// Copy native memory to dense matrix.
 /// </summary>
 /// <param name="dense">CHOLMOD dense matrix.</param>
 /// <param name="matrix">Target storage.</param>
 protected abstract void CopyDense(CholmodDense dense, DenseColumnMajorStorage <T> matrix);