예제 #1
0
        //@Override
        public void solve(DMatrixRMaj B, DMatrixRMaj X)
        {
            DMatrixSparseCSC L = cholesky.getL();

            int N = L.numRows;

            double[] b = TriangularSolver_DSCC.adjust(gb, N);
            double[] x = TriangularSolver_DSCC.adjust(gx, N);

            int[] Pinv = reduce.getArrayPinv();

            for (int col = 0; col < B.numCols; col++)
            {
                int index = col;
                for (int i = 0; i < N; i++, index += B.numCols)
                {
                    b[i] = B.data[index];
                }

                if (Pinv != null)
                {
                    CommonOps_DSCC.permuteInv(Pinv, b, x, N);
                    TriangularSolver_DSCC.solveL(L, x);
                    TriangularSolver_DSCC.solveTranL(L, x);
                    CommonOps_DSCC.permute(Pinv, x, b, N);
                }
                else
                {
                    TriangularSolver_DSCC.solveL(L, b);
                    TriangularSolver_DSCC.solveTranL(L, b);
                }

                index = col;
                for (int i = 0; i < N; i++, index += X.numCols)
                {
                    X.data[index] = b[i];
                }
            }
        }