Beispiel #1
0
        /// <summary>
        ///     Multiplies matrix by some number
        /// </summary>
        /// <param name="number">Multiplier</param>
        public void MultiplyByNumber(IntegerBitset number)
        {
            if (number == null)
            {
                throw new ArgumentNullException(nameof(number));
            }

            for (var i = 0; i < _columns; i++)
            {
                for (var j = 0; j < _rows; j++)
                {
                    Matrix[i][j] = new IntegerBitset(
                        IntegerBitsetUtils.BitArrayTruncate(IntegerBitsetUtils.BitArrayMultiply(
                                                                Matrix[i][j].GetBitArray(), number.GetBitArray(), new BitArray(1, false), out _), 32));
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///     Multiplies matrix by IntegerBitsetMatrix
        /// </summary>
        public void MultiplyByMatrix(IntegerBitsetMatrix multiplierMatrix)
        {
            if (multiplierMatrix == null)
            {
                throw new ArgumentNullException(nameof(multiplierMatrix));
            }

            var aRows = _rows;
            var aCols = _columns;
            var bRows = multiplierMatrix.GetRows();
            var bCols = multiplierMatrix.GetColumns();

            if (aCols != bRows)
            {
                throw new OperationCanceledException("Non-conformable matrices in MultiplyByMatrix");
            }
            var result = new IntegerBitsetMatrix(aRows, bCols);

            for (var i = 0; i < aCols; ++i)     // each row of A
            {
                for (var j = 0; j < bRows; ++j) // each col of B
                {
                    for (var k = 0; k < aRows; ++k)
                    {
                        //Bit by Bit Multiplying
                        result.Matrix[i][j] = new IntegerBitset(
                            IntegerBitsetUtils.BitArrayAdder(
                                Matrix[i][j].GetBitArray(),
                                IntegerBitsetUtils.BitArrayTruncate(
                                    IntegerBitsetUtils.BitArrayMultiply(
                                        Matrix[i][k].GetBitArray(),
                                        multiplierMatrix.Matrix[k][j].GetBitArray(),
                                        new BitArray(1, false), out _), 32),
                                new BitArray(1, false), out _));
                    }
                }
            }

            Matrix   = result.Matrix;
            _columns = result.GetColumns();
            _rows    = result.GetRows();
        }
Beispiel #3
0
        /// <summary>
        ///     Raises matrix to some power
        /// </summary>
        /// <param name="power">Power</param>
        public void RaiseMatrixToPower(IntegerBitset power)
        {
            if (power == null)
            {
                throw new ArgumentNullException(nameof(power));
            }

            for (var i = 0; i < _columns; i++)
            {
                for (var j = 0; j < _rows; j++)
                {
                    for (var k = 1; k < power.GetInt32(); k++)
                    {
                        Matrix[i][j] = new IntegerBitset(
                            IntegerBitsetUtils.BitArrayTruncate(IntegerBitsetUtils.BitArrayMultiply(
                                                                    Matrix[i][j].GetBitArray(), Matrix[i][j].GetBitArray(), new BitArray(1, false), out _), 32));
                    }
                }
            }
        }