/// <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)); } } }
/// <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(); }
/// <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)); } } } }