LinearAlgebra[Modular]
AddMultiple
add multiple of a mod m Matrix or Vector to another
Calling Sequence
Parameters
Description
Examples
AddMultiple(m, mult, A, B, order, 'sparse')
AddMultiple(m, mult, A, B, C, 'sparse')
m
-
modulus
A
Matrix or Vector, including subspec
B
order
ordering of output object
sparse
(optional) controls behavior of operation
mult
(optional) multiplier, default is 1
C
output Matrix or Vector, including subspec
The AddMultiple function performs the operation mult⁢B+A placing the output in a new object, or in C, depending on calling sequence. All of A, B, and C must be mod m Matrices or Vectors, and mult must be a scalar.
The first calling sequence returns a new mod m Matrix or Vector for the result with the specified ordering, order, or the ordering of the input objects A and B.
Note: If A and B have different ordering, order must be specified.
The second calling sequence places the output of the computation into C, returning NULL.
Note: The parameter C can be the same Matrix or Vector as A or B as long as the operation is performed with direct overlap. For example, if A and C are the same Matrix, the operation involving the entry Ai,j must have the result going to Ci,j.
The multiplier, mult, is an optional parameter. However, if it is not specified, it is assumed to be 1. The multiplier must be in the range 0..m−1. This function can be used to perform Matrix or Vector subtraction by the selection of mult=m−1. This is coded efficiently, that is, without multiplication.
If specified, the optional keyword 'sparse', is only applicable if the multiplier is not 1 or m−1 and the datatype is a hardware datatype. It indicates that the algorithm checks for zero entries before performing multiplications. This typically provides an efficiency gain if matrices have 10% or more entries in B equal to zero. This is not implemented for the integer datatype, as it typically provides very little gain.
Note: In cases for which sparse does not apply but has been specified, the option is ignored.
The AddMultiple function allows the use of sub-Matrix and sub-Vector specifications for both input and output Matrices or Vectors. For example, the function can be used to add a row of a Matrix to a row Vector, placing the result in the column of another Matrix.
Note: If the used portion of A or B, and C overlap, but not directly, the behavior of AddMultiple is undefined.
This command is part of the LinearAlgebra[Modular] package, so it can be used in the form AddMultiple(..) only after executing the command with(LinearAlgebra[Modular]). However, it can always be used in the form LinearAlgebra[Modular][AddMultiple](..).
with⁡LinearAlgebraModular:
A≔Mod⁡13,Matrix⁡4,4,i,j↦rand⁡,integer
A≔10081226011921174111211
B≔Mod⁡13,Matrix⁡4,4,i,j↦ifi=jthen1else0endif,integer
B≔1000010000100001
Default multiplier and new output Matrix (A+B).
AddMultiple⁡13,A,B
11081227011921274111212
Chosen multiplier of 2 (A+2*B).
AddMultiple⁡13,2,A,B
120812280119207411120
Replace A with the result.
AddMultiple⁡13,2,A,B,A:
Add row 3 of A to row 2 of A, with output in column 1 of B.
AddMultiple⁡13,A,3,transpose,A,2,transpose,B,1..−1,1:
A,B
120812280119207411120,110001010000105001
Construct a larger Matrix and identity Matrix, using larger modulus.
N≔100:
p≔65535:
A≔Mod⁡p,Matrix⁡N,N,i,j↦rand⁡,float8
B≔Mod⁡p,Matrix⁡N,N,i,j↦ifi=jthen1else0endif,float8
Time addition of 327*B to A 2000 times.
t≔time⁡:
forito2000doAddMultiple⁡p,327,A,B,Aenddo:time⁡−t
0.224
Time addition of 327*B to A 2000 times using sparse.
forito2000doAddMultiple⁡p,327,A,B,A,sparseenddo:time⁡−t
0.091
See Also
LinearAlgebra/Details
LinearAlgebra[Modular][Mod]
LinearAlgebra[Modular][subspec]
Download Help Document