123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- \section{Matrix Normal Forms}
- \begin{Operator}{Smithex}
- The operator \name{smithex} computes the Smith normal form S of a
- \nameref{matrix} A (say). It returns \{S,P,$P^-1$\} where $P*S*P^-1 = A$.
- \begin{Syntax}
- \name{smithex}\(\meta{matrix},\meta{variable}\)
- \meta{matrix} :- a rectangular \nameref{matrix} of univariate polynomials in
- \meta{variable}.
- \meta{variable} :- the variable.
- \end{Syntax}
- \begin{Examples}
- a := mat((x,x+1),(0,3*x^2)); &
- \begin{multilineoutput}{6cm}
- [x x + 1]
- [ ]
- a := [ 2 ]
- [0 3*x ]
- \end{multilineoutput}\\
- smithex(a,x); &
- \begin{multilineoutput}{6cm}
- [1 0 ] [1 0] [x x + 1]
- \{ [ ], [ ], [ ] \}
- [ 3] [ 2 ] [ ]
- [0 x ] [3*x 1] [-3 -3 ]
- \end{multilineoutput}\\
- \end{Examples}
- \end{Operator}
- \begin{Operator}{Smithex\_int}
- The operator \name{smithex\_int} performs the same task as \name{smithex}
- but on matrices containing only integer entries. Namely,
- \name{smithex\_int} returns \{S,P,$P^-1$\} where S is the smith normal
- form of the input \nameref{matrix} (A say), and $P*S*P^-1 = A$.
- \begin{Syntax}
- \name{smithex\_int}\(\meta{matrix}\)
- \meta{matrix} :- a rectangular \nameref{matrix} of integer entries.
- \end{Syntax}
- \begin{Examples}
- a := mat((9,-36,30),(-36,192,-180),(30,-180,180)); &
- \begin{multilineoutput}{6cm}
- [ 9 -36 30 ]
- [ ]
- a := [-36 192 -180]
- [ ]
- [30 -180 180 ]
- \end{multilineoutput}\\
- smithex_int(a); &
- \begin{multilineoutput}{6cm}
- [3 0 0 ] [-17 -5 -4 ] [1 -24 30 ]
- [ ] [ ] [ ]
- \{ [0 12 0 ], [64 19 15 ], [-1 25 -30] \}
- [ ] [ ] [ ]
- [0 0 60] [-50 -15 -12] [0 -1 1 ]
- \end{multilineoutput}\\
- \end{Examples}
- \end{Operator}
- \begin{Operator}{Frobenius}
- The operator \name{frobenius} computes the \name{frobenius} normal form F of a
- \nameref{matrix} (A say). It returns \{F,P,$P^-1$\} where $P*F*P^-1 = A$.
- \begin{Syntax}
- \name{frobenius}\(\meta{matrix}\)
- \meta{matrix} :- a square \nameref{matrix}.
- \end{Syntax}
- Field Extensions:
- By default, calculations are performed in the rational numbers. To
- extend this field the \nameref{arnum} package can be used. The package must
- first be loaded by load\_package arnum;. The field can now be extended
- by using the defpoly command. For example, defpoly sqrt2**2-2; will
- extend the field to include the square root of 2 (now defined by sqrt2).
- Modular Arithmetic:
- \name{Frobenius} can also be calculated in a modular base. To do this
- first type on modular;. Then setmod p; (where p is a prime) will set
- the modular base of calculation to p. By further typing on balanced\_mod
- the answer will appear using a symmetric modular representation. See
- \nameref{ratjordan} for an example.
- \begin{Examples}
- a := mat((x,x^2),(3,5*x)); &
- \begin{multilineoutput}{6cm}
- [ 2 ]
- [x x ]
- a := [ ]
- [3 5*x]
- \end{multilineoutput}\\
- frobenius(a);&
- \begin{multilineoutput}{6cm}
- [ 2] [1 x] [ - x ]
- \{ [0 - 2*x ], [ ], [1 -----] \}
- [ ] [0 3] [ 3 ]
- [1 6*x ] [ ]
- [ 1 ]
- [0 --- ]
- [ 3 ]
- \end{multilineoutput}\\
- load\_package arnum;\\
- defpoly sqrt2**2-2;\\
- a := mat((sqrt2,5),(7*sqrt2,sqrt2));&
- \begin{multilineoutput}{6cm}
- [ sqrt2 5 ]
- a := [ ]
- [7*sqrt2 sqrt2]
- \end{multilineoutput}\\
- frobenius(a); &
- \begin{multilineoutput}{6cm}
- [0 35*sqrt2 - 2] [1 sqrt2 ] [ 1 ]
- \{ [ ], [ ], [1 - --- ] \}
- [1 2*sqrt2 ] [1 7*sqrt2] [ 7 ]
- [ ]
- [ 1 ]
- [0 ----*sqrt2]
- [ 14 ]
- \end{multilineoutput}\\
- \end{Examples}
- \end{Operator}
- \begin{Operator}{Ratjordan}
- The operator \name{ratjordan} computes the rational Jordan normal form R
- of a \nameref{matrix} (A say). It returns \{R,P,$P^-1$\} where $P*R*P^-1 = A$.
- \begin{Syntax}
- \name{ratjordan}\(\meta{matrix}\)
- \meta{matrix} :- a square \nameref{matrix}.
- \end{Syntax}
- Field Extensions:
- By default, calculations are performed in the rational numbers. To
- extend this field the \name{arnum} package can be used. The package must
- first be loaded by load\_package arnum;. The field can now be extended
- by using the defpoly command. For example, defpoly sqrt2**2-2; will
- extend the field to include the square root of 2 (now defined by sqrt2).
- See \nameref{frobenius} for an example.
- Modular Arithmetic:
- \name{ratjordan} can also be calculated in a modular base. To do this
- first type on modular;. Then setmod p; (where p is a prime) will set
- the modular base of calculation to p. By further typing on balanced\_mod
- the answer will appear using a symmetric modular representation.
- \begin{Examples}
- a := mat((5,4*x),(2,x^2));&
- \begin{multilineoutput}{6cm}
- [5 4*x]
- [ ]
- a := [ 2 ]
- [2 x ]
- \end{multilineoutput}\\
- ratjordan(a); &
- \begin{multilineoutput}{6cm}
- [0 x*( - 5*x + 8)] [1 5] [ -5 ]
- \{ [ ], [ ], [1 -----] \}
- [ 2 ] [0 2] [ 2 ]
- [1 x + 5 ] [ ]
- [ 1 ]
- [0 -----]
- [ 2 ]
- \end{multilineoutput}\\
- on modular; \\
- setmod 23; \\
- a := mat((12,34),(56,78)); &
- \begin{multilineoutput}{6cm}
- [12 11]
- a := [ ]
- [10 9 ]
- \end{multilineoutput}\\
- ratjordan(a); &
- \begin{multilineoutput}{6cm}
- [15 0] [16 8] [1 21]
- \{ [ ], [ ], [ ] \}
- [0 6] [19 4] [1 4 ]
- \end{multilineoutput}\\
- on balanced\_mod;\\
- ratjordan(a);&
- \begin{multilineoutput}{6cm}
- [- 8 0] [ - 7 8] [1 - 2]
- \{ [ ], [ ], [ ] \}
- [ 0 6] [ - 4 4] [1 4 ]
- \end{multilineoutput}\\
- \end{Examples}
- \end{Operator}
- \begin{Operator}{Jordansymbolic}
- The operator \name{jordansymbolic} computes the Jordan normal form J
- of a \nameref{matrix} (A say). It returns \{J,L,P,$P^-1$\} where
- $P*J*P^-1 = A$. L = \{ll,mm\} where mm is a name and ll is a list of
- irreducible factors of p(mm).
- \begin{Syntax}
- \name{jordansymbolic}\(\meta{matrix}\)
- \meta{matrix} :- a square \nameref{matrix}.
- \end{Syntax}
- Field Extensions:
- By default, calculations are performed in the rational numbers. To
- extend this field the \nameref{arnum} package can be used. The package must
- first be loaded by load\_package arnum;. The field can now be extended
- by using the defpoly command. For example, defpoly sqrt2**2-2; will
- extend the field to include the square root of 2 (now defined by sqrt2).
- See \nameref{frobenius} for an example.
- Modular Arithmetic:
- \name{jordansymbolic} can also be calculated in a modular base. To do this
- first type on modular;. Then setmod p; (where p is a prime) will set
- the modular base of calculation to p. By further typing on balanced\_mod
- the answer will appear using a symmetric modular representation. See
- \nameref{ratjordan} for an example.
- % Extras:
- % If using \name{xr}, the X interface for REDUCE, then the appearance of the
- % output can be improved by switching on looking\_good. This
- % converts any lambdas to a greek font.
- \begin{Examples}
- a := mat((1,y),(2,5*y)); &
- \begin{multilineoutput}{6cm}
- [1 y ]
- a := [ ]
- [2 5*y]
- \end{multilineoutput}\\
- jordansymbolic(a); &
- \begin{multilineoutput}{6cm}
- \{
- [lambda11 0 ]
- [ ]
- [ 0 lambda12]
- ,
- 2
- {{lambda - 5*lambda*y - lambda + 3*y},lambda},
- [lambda11 - 5*y lambda12 - 5*y]
- [ ]
- [ 2 2 ]
- ,
- [ 2*lambda11 - 5*y - 1 5*lambda11*y - lambda11 - y + 1 ]
- [---------------------- ---------------------------------]
- [ 2 2 ]
- [ 25*y - 2*y + 1 2*(25*y - 2*y + 1) ]
- [ ]
- [ 2*lambda12 - 5*y - 1 5*lambda12*y - lambda12 - y + 1 ]
- [---------------------- ---------------------------------]
- [ 2 2 ]
- [ 25*y - 2*y + 1 2*(25*y - 2*y + 1) ]
- \}
- \end{multilineoutput}\\
- \end{Examples}
- \end{Operator}
- \begin{Operator}{Jordan}
- The operator \name{jordan} computes the Jordan normal form J
- of a \nameref{matrix} (A say). It returns \{J,P,$P^-1$\} where $P*J*P^-1 = A$.
- \begin{Syntax}
- \name{jordan}\(\meta{matrix}\)
- \meta{matrix} :- a square \nameref{matrix}.
- \end{Syntax}
- Field Extensions:
- By default, calculations are performed in the rational numbers. To
- extend this field the \name{arnum} package can be used. The package must
- first be loaded by load\_package arnum;. The field can now be extended
- by using the defpoly command. For example, defpoly sqrt2**2-2; will
- extend the field to include the square root of 2 (now defined by sqrt2).
- See \nameref{frobenius} for an example.
- Modular Arithmetic:
- \name{Jordan} can also be calculated in a modular base. To do this
- first type on modular;. Then setmod p; (where p is a prime) will set
- the modular base of calculation to p. By further typing on balanced\_mod
- the answer will appear using a symmetric modular representation. See
- \nameref{ratjordan} for an example.
- \begin{Examples}
- a := mat((1,x),(0,x)); &
- \begin{multilineoutput}{6cm}
- [1 x]
- a := [ ]
- [0 x]
- \end{multilineoutput}\\
- jordan(a);&
- \begin{multilineoutput}{6cm}
- \{
- [1 0]
- [ ]
- [0 x]
- ,
- [ 1 x ]
- [------- --------------]
- [ x - 1 2 ]
- [ x - 2*x + 1 ]
- [ ]
- [ 1 ]
- [ 0 ------- ]
- [ x - 1 ]
- ,
- [x - 1 - x ]
- [ ]
- [ 0 x - 1]
- \}
- \end{multilineoutput}\\
- \end{Examples}
- \end{Operator}
|