/usr/share/axiom-20170501/src/algebra/IMATRIX.spad is in axiom-source 20170501-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | )abbrev domain IMATRIX IndexedMatrix
++ Author: Grabmeier, Gschnitzer, Williamson
++ Date Created: 1987
++ Date Last Updated: July 1990
++ Description:
++ An \spad{IndexedMatrix} is a matrix where the minimal row and column
++ indices are parameters of the type. The domains Row and Col
++ are both IndexedVectors.
++ The index of the 'first' row may be obtained by calling the
++ function \spadfun{minRowIndex}. The index of the 'first' column may
++ be obtained by calling the function \spadfun{minColIndex}. The index of
++ the first element of a 'Row' is the same as the index of the
++ first column in a matrix and vice versa.
IndexedMatrix(R,mnRow,mnCol) : SIG == CODE where
R : Ring
mnRow : Integer
mnCol : Integer
Row ==> IndexedVector(R,mnCol)
Col ==> IndexedVector(R,mnRow)
MATLIN ==> MatrixLinearAlgebraFunctions(R,Row,Col,$)
SIG ==> MatrixCategory(R,Row,Col)
CODE ==> InnerIndexedTwoDimensionalArray(R,mnRow,mnCol,Row,Col) add
swapRows_!(x,i1,i2) ==
(i1 < minRowIndex(x)) or (i1 > maxRowIndex(x)) or _
(i2 < minRowIndex(x)) or (i2 > maxRowIndex(x)) =>
error "swapRows!: index out of range"
i1 = i2 => x
minRow := minRowIndex x
xx := x pretend PrimitiveArray(PrimitiveArray(R))
n1 := i1 - minRow; n2 := i2 - minRow
row1 := qelt(xx,n1)
qsetelt_!(xx,n1,qelt(xx,n2))
qsetelt_!(xx,n2,row1)
xx pretend $
if R has commutative("*") then
determinant x == determinant(x)$MATLIN
minordet x == minordet(x)$MATLIN
if R has EuclideanDomain then
rowEchelon x == rowEchelon(x)$MATLIN
if R has IntegralDomain then
rank x == rank(x)$MATLIN
nullity x == nullity(x)$MATLIN
nullSpace x == nullSpace(x)$MATLIN
if R has Field then
inverse x == inverse(x)$MATLIN
|