/usr/share/axiom-20170501/src/algebra/MCDEN.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 | )abbrev package MCDEN MatrixCommonDenominator
++ Author: Manuel Bronstein
++ Date Created: 2 May 1988
++ Date Last Updated: 20 Jul 1990
++ Description:
++ MatrixCommonDenominator provides functions to
++ compute the common denominator of a matrix of elements of the
++ quotient field of an integral domain.
MatrixCommonDenominator(R, Q) : SIG == CODE where
R: IntegralDomain
Q: QuotientFieldCategory R
VR ==> Vector R
VQ ==> Vector Q
SIG ==> with
commonDenominator : Matrix Q -> R
++ commonDenominator(q) returns a common denominator d for
++ the elements of q.
clearDenominator : Matrix Q -> Matrix R
++ clearDenominator(q) returns p such that \spad{q = p/d} where d is
++ a common denominator for the elements of q.
splitDenominator : Matrix Q -> Record(num: Matrix R, den: R)
++ splitDenominator(q) returns \spad{[p, d]} such that \spad{q = p/d} and d
++ is a common denominator for the elements of q.
CODE ==> add
import ListFunctions2(Q, R)
import MatrixCategoryFunctions2(Q,VQ,VQ,Matrix Q,R,VR,VR,Matrix R)
clearDenominator m ==
d := commonDenominator m
map(x +-> numer(d*x), m)
splitDenominator m ==
d := commonDenominator m
[map(x +-> numer(d*x), m), d]
if R has GcdDomain then
commonDenominator m == lcm map(denom, parts m)
else
commonDenominator m == reduce("*",map(denom, parts m),1)$List(R)
|