Пример #1
0
        /**
         * Writes the lower triangular matrix into the specified matrix.
         *
         * @param lower Where the lower triangular matrix is written to.
         */
        //@Override
        public CMatrixRMaj getLower(CMatrixRMaj lower)
        {
            int numRows = LU.numRows;
            int numCols = LU.numRows < LU.numCols ? LU.numRows : LU.numCols;

            lower = UtilDecompositons_CDRM.checkZerosUT(lower, numRows, numCols);

            for (int i = 0; i < numCols; i++)
            {
                lower.set(i, i, 1.0f, 0.0f);

                for (int j = 0; j < i; j++)
                {
                    int indexLU = LU.getIndex(i, j);
                    int indexL  = lower.getIndex(i, j);

                    float real      = LU.data[indexLU];
                    float imaginary = LU.data[indexLU + 1];

                    lower.data[indexL]     = real;
                    lower.data[indexL + 1] = imaginary;
                }
            }

            if (numRows > numCols)
            {
                for (int i = numCols; i < numRows; i++)
                {
                    for (int j = 0; j < numCols; j++)
                    {
                        int indexLU = LU.getIndex(i, j);
                        int indexL  = lower.getIndex(i, j);

                        float real      = LU.data[indexLU];
                        float imaginary = LU.data[indexLU + 1];

                        lower.data[indexL]     = real;
                        lower.data[indexL + 1] = imaginary;
                    }
                }
            }
            return(lower);
        }
Пример #2
0
        //@Override
        public CMatrixRMaj getT(CMatrixRMaj T)
        {
            // write the values to T
            if (lower)
            {
                T = UtilDecompositons_CDRM.checkZerosUT(T, n, n);
                for (int i = 0; i < n; i++)
                {
                    int index = i * n * 2;
                    for (int j = 0; j <= i; j++)
                    {
                        T.data[index] = this.T.data[index];
                        index++;
                        T.data[index] = this.T.data[index];
                        index++;
                    }
                }
            }
            else
            {
                T = UtilDecompositons_CDRM.checkZerosLT(T, n, n);
                for (int i = 0; i < n; i++)
                {
                    int index = (i * n + i) * 2;
                    for (int j = i; j < n; j++)
                    {
                        T.data[index] = this.T.data[index];
                        index++;
                        T.data[index] = this.T.data[index];
                        index++;
                    }
                }
            }

            return(T);
        }