of {$slidecount} ½ {$title}, {$author}



G A P

Groups, Algorithms, Programming

www.gap-system.org

键盘操作

Full screen
F11 key
Next Slide
Page down key, Return key
Previous Slide
Page up key
Next Item
Single mouse click, Right Arrow key, Space bar
Previous Item
Left Arrow key
First Slide
Home key
Last Slide
End key
Font size
Use +/- key to increase/decrease font size
Miscellaneous
C-key: navigates to Table of Content
M-key: Mouse navigation on/off
P-key: Print mode / Show all Slides
S-key: Statusbar off/on

首页




Vectors and Matrices
Groups, Algorithms, Programming
a System for Computational Discrete Algebra


Haifeng Xu

(hfxu@yzu.edu.cn)

GAP website: www.gap-system.org

Original Document: http://www-circa.mcs.st-and.ac.uk/gapfinite0.php
http://www.math.colostate.edu/~hulpke

目录

Vectors over the rational numbers

Define a vector

We begin by looking at ways to define a vector.

v1:= [ 1/2, 3/4, -2/3, 22/7 ];

[ 1/2, 3/4, -2/3, 22/7 ]

We can see if what we have defined is a vector

IsVector( v1 );

true

IsList( v1 );

true

Vectors over the rational numbers

Define a vector space

We define a vector space over the rational numbers

Suppose we want a three dimensional subspace of R4

v2:= [ 1, 3, 2, 4 ];

[ 1, 3, 2, 4 ]

v3:= [ 1/2, 1/4, 1/3, 3/4 ];

[ 1/2, 1/4, 1/3, 3/4 ]

V:= VectorSpace( Rationals, [ v1, v2, v3 ] );

<vector space over Rationals, with 3 generators>

It is easy to test if vectors lie in the vector space $V$

[ 1, 1, 1, 1 ] in V;

false

[ 28, 70, 84, 45 ] in V;

true

Vectors over the rational numbers

Operation of vectors

Scalar multiplication of vectors is easy

1/2*v1;

[ 1/4, 3/8, -1/3, 11/7 ]

As is the dot product

v1*v2;

1175/84

Of course linear combinations of vectors from V lie in V. We try an example

1/2*v1 - 3/4*v2 + 5/4*v3 in V;

true

Vectors over a finite field

Linear subspace over finite field

Let us construct the 3 dimensional vector space over GF(3)

V:= FullRowSpace( GF( 3 ), 3 );

( GF(3)^3 )

Let us check whether a vector is in V

[ 1, 1, 1 ] in V;

false

This gives false since 1 is not in GF(3). We need to use the identity of GF(3)

o:= One( GF( 3 ) );

Z(3)^0

[ 1, 1, 1 ]*o in V;

true

Vectors over a finite field

Some of all vectors

Let us look at the sum of all the vectors of V

s:= [ 0, 0, 0 ]*o;;
for v in V do
  s:= s + v;
od;
Print(s, "\n");
[ 0*Z(3), 0*Z(3), 0*Z(3) ]

It is easy to see why one gets 0 since for each v in V, -v is also in V. What about a field of characteristic 2?

V:= FullRowSpace( GF( 4 ), 4 );;
o:= One( GF( 4 ) );;
s:= [ 0, 0, 0, 0 ]*o;;
for v in V do
  s:= s + v;
od;
Print(s, "\n");

Vectors over a finite field

Some of all vectors

V:= FullRowSpace( GF( 4 ), 4 );;
o:= One( GF( 4 ) );;
s:= [ 0, 0, 0, 0 ]*o;;
for v in V do
  s:= s + v;
od;
Print(s, "\n");
[ 0*Z(2), 0*Z(2), 0*Z(2), 0*Z(2) ]

So the answer is still 0. This is not quite so obvious - what about GF(2) with dimension 1?

Bases

Base of vector space

We set up a vector space over the rationals spanned by 4 vectors

v1:= [ 2, 2, 1, 3 ];;
v2:= [ 7, 5, 5, 5 ];;
v3:= [ 3, 2, 2, 1 ];;
v4:= [ 2, 1, 2, 1 ];;

V:= VectorSpace( Rationals, [ v1, v2, v3, v4 ] );

<vector space over Rationals, with 4 generators>

We compute its basis

B:= Basis( V );

SemiEchelonBasis( <vector space over Rationals, with 4 generators>, ... )

What is the dimension of V ?

Length( B );

3

Bases

Base of vector space

Let us see the basis vectors GAP has computed

BasisVectors( B );

[ [ 1, 1, 1/2, 3/2 ], [ 0, 1, -3/4, 11/4 ], [ 0, 0, 1, 3 ] ]

We can express vectors in V as a linear combination of the basis vectors B

Coefficients( B, [2,1,2,1]);

[ 2, -1, 1/4 ]

Since the coefficients are [ 2, -1, 1/4 ] we should have

[ 2, 1, 2, 1 ] = 2*B[1] - 1*B[2] + 1/4*B[3];

true

Or it can be varified by

list:=[ [ 1, 1, 1/2, 3/2 ], [ 0, 1, -3/4, 11/4 ], [ 0, 0, 1, 3 ] ];;
coef:=[ 2, -1, 1/4 ];;
coef*list;
[ 2, 1, 2, 1 ]

Bases

Base of vector space

What if we try to express a vector not in the space as a linear combination?

Coefficients( B, [1, 0, 0, 0]);

fail

Not surprisingly we get "fail".

We can take linear combinations of the vectors of B with the LinearCombination command. For example

LinearCombination( B, [ 1/2, 1/3, 1/4 ] );

[ 1/2, 5/6, 1/4, 29/12 ]

produces the same result as

1/2*B[1] + 1/3*B[2] + 1/4*B[3];

[ 1/2, 5/6, 1/4, 29/12 ]

Defining matrices

Matrix

We next look at ways to define a matrix.

The following command defines a matrix as a list of lists.

m1:= [ [ 1, 2, 3 ], [ 2, 3, -1 ], [ 1, -2, 5] ];

[ [ 1, 2, 3 ], [ 2, 3, -1 ], [ 1, -2, 5 ] ]

We can display this on the screen as a more standard looking matrix.

Display( m1 );

[ [   1,   2,   3 ],
  [   2,   3,  -1 ],
  [   1,  -2,   5 ] ]

Defining matrices

Element of matrix

To print the (2, 3)-entry of m1 we use

m1[2][3];

-1

To change an entry use

m1[2][2]:=300;

300

Display( m1 );

[ [    1,    2,    3 ],
  [    2,  300,   -1 ],
  [    1,   -2,    5 ] ]

Defining matrices

Matrix over GF(5)

Next we define a matrix over GF(5)
We let o be the identity of GF(5) and z be the zero of GF(5)

o:= One( GF( 5 ) );

Z(5)^0

z:= Zero( GF( 5 ) );

0*Z(5)

m2:= [ [ o, z, z ], [ 2*o, 3*o, z ], [ z, o, 4*o ] ];

[ [ Z(5)^0, 0*Z(5), 0*Z(5) ], [ Z(5), Z(5)^3, 0*Z(5) ], [ 0*Z(5), Z(5)^0, Z(5)^2 ] ]

Now Display gives a more readable form

Display( m2 );

 1 . .
 2 3 .
 . 1 4

Defining matrices

Using function to define matrix

We can easily define matrices whose ( i, j ) th entry is given by a function of i and j.

m3:= List( [ 1, 2, 3 ], i -> List( [ 1, 2, 3 ], j -> i*j ) );

[ [ 1, 2, 3 ], [ 2, 4, 6 ], [ 3, 6, 9 ] ]

Display(m3);

[ [  1,  2,  3 ],
  [  2,  4,  6 ],
  [  3,  6,  9 ] ]

Defining matrices

Using function to define matrix

Of course it is easy to define large matrices this way

m4:= List( [ 1 .. 12 ], i -> List( [ 1 .. 12 ], j -> i*j ) );

[ [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ],
  [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 ],
  [ 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36 ],
  [ 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48 ],
  [ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60 ],
  [ 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72 ],
  [ 7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84 ],
  [ 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96 ],
  [ 9, 18, 27, 36, 45, 54, 63, 72, 81, 90, 99, 108 ],
  [ 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120 ],
  [ 11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132 ],
  [ 12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132, 144 ] ]

Display( m4 );

[ [    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12 ],
  [    2,    4,    6,    8,   10,   12,   14,   16,   18,   20,   22,   24 ],
  [    3,    6,    9,   12,   15,   18,   21,   24,   27,   30,   33,   36 ],
  [    4,    8,   12,   16,   20,   24,   28,   32,   36,   40,   44,   48 ],
  [    5,   10,   15,   20,   25,   30,   35,   40,   45,   50,   55,   60 ],
  [    6,   12,   18,   24,   30,   36,   42,   48,   54,   60,   66,   72 ],
  [    7,   14,   21,   28,   35,   42,   49,   56,   63,   70,   77,   84 ],
  [    8,   16,   24,   32,   40,   48,   56,   64,   72,   80,   88,   96 ],
  [    9,   18,   27,   36,   45,   54,   63,   72,   81,   90,   99,  108 ],
  [   10,   20,   30,   40,   50,   60,   70,   80,   90,  100,  110,  120 ],
  [   11,   22,   33,   44,   55,   66,   77,   88,   99,  110,  121,  132 ],
  [   12,   24,   36,   48,   60,   72,   84,   96,  108,  120,  132,  144 ] ]

Defining matrices

Using function to define matrix

Defining the same matrix, but this time over Z(5) can be done by either

m5:= List( [ 1 .. 12 ], i -> List( [ 1 .. 12 ], j -> i*j*o ) );

[ [ Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5) ],
  [ Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2 ],
  [ Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0 ],
  [ Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3 ],
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5) ],
  [ Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5) ],
  [ Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2 ],
  [ Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0 ],
  [ Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3 ],
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5) ],
  [ Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5) ],
  [ Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2 ] ]

or

m5:= List( [1 .. 12], i -> List( [1 .. 12], j -> i*j ) )*o;

[ [ Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5) ],
  [ Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2 ],
  [ Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0 ],
  [ Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3 ],
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5) ],
  [ Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5) ],
  [ Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2 ],
  [ Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0, Z(5)^2, Z(5), 0*Z(5), Z(5)^3, Z(5)^0 ],
  [ Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3, Z(5), Z(5)^0, 0*Z(5), Z(5)^2, Z(5)^3 ],
  [ 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5), 0*Z(5) ],
  [ Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5), Z(5)^3, Z(5)^2, 0*Z(5), Z(5)^0, Z(5) ],
  [ Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2, Z(5)^0, Z(5)^3, 0*Z(5), Z(5), Z(5)^2 ] ]

Defining matrices

Diplay this matrix m5

Try Display with these matrices.

Display(m5);

 1 2 3 4 . 1 2 3 4 . 1 2
 2 4 1 3 . 2 4 1 3 . 2 4
 3 1 4 2 . 3 1 4 2 . 3 1
 4 3 2 1 . 4 3 2 1 . 4 3
 . . . . . . . . . . . .
 1 2 3 4 . 1 2 3 4 . 1 2
 2 4 1 3 . 2 4 1 3 . 2 4
 3 1 4 2 . 3 1 4 2 . 3 1
 4 3 2 1 . 4 3 2 1 . 4 3
 . . . . . . . . . . . .
 1 2 3 4 . 1 2 3 4 . 1 2
 2 4 1 3 . 2 4 1 3 . 2 4

Special types of matrices

Identity matrix

The following need little explanation
The identity matrix must be square.

id:= IdentityMat( 5 );;
Display( id );
[ [  1,  0,  0,  0,  0 ],
  [  0,  1,  0,  0,  0 ],
  [  0,  0,  1,  0,  0 ],
  [  0,  0,  0,  1,  0 ],
  [  0,  0,  0,  0,  1 ] ]

Special types of matrices

Zero matrix

The zero matrix can be rectangular

zm:= NullMat(6, 8);;
Display( zm );
[ [  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0 ],
  [  0,  0,  0,  0,  0,  0,  0,  0 ] ]
zm:= NullMat(6, 7, GF(2));;
Display( zm );
 . . . . . . .
 . . . . . . .
 . . . . . . .
 . . . . . . .
 . . . . . . .
 . . . . . . .

Special types of matrices

Diagonal matrix

A diagonal matrix is square. We give it the diagonal entries.

dm:= DiagonalMat( [ 1, 1, 2, 2, 3, 4 ] );;
Display( dm );
[ [  1,  0,  0,  0,  0,  0 ],
  [  0,  1,  0,  0,  0,  0 ],
  [  0,  0,  2,  0,  0,  0 ],
  [  0,  0,  0,  2,  0,  0 ],
  [  0,  0,  0,  0,  3,  0 ],
  [  0,  0,  0,  0,  0,  4 ] ]

We can define a similar matrix over a finite field.

o:= One(GF( 3 ));;
dm:= DiagonalMat( [ 1, 1, 2, 2, 3, 4 ]*o );;
Display( dm );
 1 . . . . .
 . 1 . . . .
 . . 2 . . .
 . . . 2 . .
 . . . . . .
 . . . . . 1

Special types of matrices

Random matrix with integer entries

GAP will produce a random matrix whose entries are integers
in the range [-10..10] with a binomial distribution.

rm:= RandomMat(10, 10);;
Display( rm );
[ [   1,  -4,   1,   2,  -3,   2,   5,   1,   0,  -2 ],
  [   4,   3,   5,   3,   1,  -2,   1,  -1,  -2,   4 ],
  [  -1,  -3,  -1,   1,   2,   0,   1,   1,  -1,   1 ],
  [   2,  -2,  -1,  -4,  -2,   1,  -1,   1,  -2,  -3 ],
  [  -5,  -4,  -3,   2,   0,  -4,   0,   3,   4,  -1 ],
  [  -1,   1,   1,   2,   4,   0,  -2,   2,   0,   4 ],
  [   3,  -1,  -3,  -1,  -3,   7,   0,   1,  -1,   2 ],
  [   0,   0,   2,   0,   5,  -1,   0,   1,   0,   4 ],
  [  -1,   0,   3,  -5,   4,   0,  -1,  -1,   0,   1 ],
  [  -1,   2,   1,   3,   0,   1,   4,   0,   2,  -3 ] ]

Of course, running this code again will produce a different matrix.

Special types of matrices

Random matrix with rational entries

GAP will also produce a random matrix with rational entries -- useful for testing other routines.

Display(RandomMat(10, 10,Rationals));

[ [   1/2,     0,  -2/5,     1,  -3/2,     0,     0,    -1,     1,     2 ],
  [    -1,   1/3,     1,  -3/5,    -1,     2,    -3,     2,   1/5,     2 ],
  [  -1/6,  -3/2,     0,    -3,     1,  -1/3,  -1/4,     0,    -4,     0 ],
  [  -1/2,     1,     1,   3/2,     0,     3,     0,     1,    -1,  -2/3 ],
  [    -1,  -2/3,     0,     2,    -1,  -1/2,  -3/2,  -5/4,     2,     2 ],
  [     1,    -3,  -1/4,    -1,     1,    -1,     0,     2,   2/5,     0 ],
  [     4,    -3,    -2,     2,   1/4,    -1,    -2,     2,  -1/2,   2/5 ],
  [    -2,    -2,    -2,  -1/3,  -1/3,     2,  -1/5,  -1/2,    -1,     0 ],
  [    -2,     1,   1/2,     0,  -2/3,  -1/2,     0,  -1/3,   3/2,   1/3 ],
  [     0,    -2,     0,     2,    -3,    -3,   3/4,     1,     1,   3/2 ] ]

Special types of matrices

Random matrix with entries in a finite field

If GAP is asked to produce a random matrix with entries in a finite field, the entries will be distributed uniformly over the field elements.

rm1:= RandomMat(10, 10, GF(5));;
Display( rm1 );
 . 1 . 4 1 4 . 1 3 2
 4 1 2 . 3 . 3 3 1 3
 3 3 1 4 2 2 2 4 2 .
 4 2 2 3 3 4 . 2 . 4
 2 3 1 1 2 1 4 1 1 3
 1 1 . 2 1 2 2 3 2 .
 4 1 . 1 4 1 1 2 1 3
 3 3 3 4 4 3 3 3 4 3
 4 4 . 1 4 4 2 2 1 4
 . 2 2 2 2 4 1 4 4 4

Matrix algebra

Addition, muliplication, etc.

Addition, multiplication, etc. for matrices is straightforward. We give examples

m:= [1..8];;
m[1]:= [ [1,2,3], [2,3,-1], [1,-2,5] ];;
m[2]:= [ [-1,4,-3], [1,2,-1], [-1,-2,3] ];;
m[3]:= m[1] + m[2];;
m[4]:= m[1]*m[2];;
m[5]:= 3*m[1] - 7*m[2];;
m[6]:= m[1]^3;;
m[7]:= m[1]^(-1);;
m[8]:= m[6]*(5*m[5] + 6*m[2]*m[4])^(-1);;
for i in [1..8] do
  Display(m[i]);
  Print("\n");
od;
[ [   1,   2,   3 ],
  [   2,   3,  -1 ],
  [   1,  -2,   5 ] ]

[ [  -1,   4,  -3 ],
  [   1,   2,  -1 ],
  [  -1,  -2,   3 ] ]

[ [   0,   6,   0 ],
  [   3,   5,  -2 ],
  [   0,  -4,   8 ] ]

[ [   -2,    2,    4 ],
  [    2,   16,  -12 ],
  [   -8,  -10,   14 ] ]

[ [   10,  -22,   30 ],
  [   -1,   -5,    4 ],
  [   10,    8,   -6 ] ]

[ [   28,  -10,  102 ],
  [   35,   63,   -4 ],
  [    4,  -98,  170 ] ]

[ [  -13/30,    8/15,   11/30 ],
  [   11/30,   -1/15,   -7/30 ],
  [    7/30,   -2/15,    1/30 ] ]

[ [   96972/194635,  288222/194635,  330503/194635 ],
  [  165884/583905,  186643/194635,  495226/583905 ],
  [  274034/583905,  220138/194635,  977281/583905 ] ]

Matrix algebra

Transpose of a matrix

To find the transpose of a matrix use TransposedMat.

m:=[ [1,2,3], [2,3,-1], [1,-2,5] ];;
mdash:=TransposedMat(m);
[ [ 1, 2, 1 ], [ 2, 3, -2 ], [ 3, -1, 5 ] ]

Display(m);

[ [   1,   2,   3 ],
  [   2,   3,  -1 ],
  [   1,  -2,   5 ] ]

Display(mdash);

[ [   1,   2,   1 ],
  [   2,   3,  -2 ],
  [   3,  -1,   5 ] ]

Some determinants

Determinant

We use the Determinant function in the obvious way

m1:= [ [1,2,3], [2,3,-1], [1,-2,5] ];;
m2:= [ [-1,4,-3], [1,2,-1], [-1,-2,3] ];;
Determinant( m1 );
-30

Determinant( m2 );

-12

Of course the determinant of a product is the product of the determinants

Determinant(m1*m2);

360

Some determinants

Determinant

If we look at matrices over GF(2) then their determinants will be either 0 or 1. What proportion would one expect for each with $2\times 2$ matrices? Let us examine the situation.

o:= One( GF(2) );;
z:= Zero( GF(2) );;

countOne:= 0;;
countZero:= 0;;
for i in [1..1000] do
  mat:= RandomMat(2, 2, GF(2));
  if Determinant(mat) = o then
    countOne:= countOne + 1;
  else
    countZero:= countZero + 1;
  fi;
od;

Print("countOne=",countOne, ", countZero=", countZero, "\n");

Some determinants

Determinant

countOne=342, countZero=658
countOne=379, countZero=621
countOne=383, countZero=617

Obviously more matrices have determinant 0 than have determinant 1. Can you see why this is so?

Show that the expected number with determinant 0 is 5/8 of the total, so 625 in this case.

What happens with $3\times 3$ matrices, $4\times 4$ matrices, $5\times 5$ matrices?

Some determinants

Determinants of $5\times 5$ matrices

countOne:= 0;;
countZero:= 0;;
for i in [1..1000] do
  mat:=RandomMat(5, 5, GF(2));
  if Determinant(mat) = o then
    countOne:= countOne + 1;
  else
    countZero:= countZero + 1;
  fi;
od;
Print("countOne=",countOne, ", countZero=", countZero, "\n");
countOne=290, countZero=710
countOne=299, countZero=701
countOne=303, countZero=697

Some determinants

Matrices over GF(3)

Before leaving this problem let us examine the case of matrices over GF(3), where of course there are three possible determinants

o:= One( GF(3) );;
z:= Zero( GF(3) );;

countTwo:= 0;;
countOne:= 0;;
countZero:= 0;;
for i in [1..1000] do
  mat:= RandomMat(2, 2, GF(3));
  if Determinant(mat) = o then
    countOne:= countOne+1;
  elif Determinant(mat) = z then
    countZero:= countZero + 1;
  else
    countTwo:= countTwo + 1;
  fi;
od;
Print("countTwo=",countTwo, ", countOne=",countOne, ", countZero=", countZero, "\n");
countTwo=277, countOne=313, countZero=410
countTwo=298, countOne=322, countZero=380
countTwo=298, countOne=291, countZero=411
countTwo=286, countOne=295, countZero=419
countTwo=296, countOne=304, countZero=400

Eigenvalues and eigenvectors

Compute the eigenvalues and eigenvectors

To compute the eigenvalues and eigenvectors of a matrix we need to specify the field

m:= [1..3];;
m[1]:= [ [1,2,3], [2,3,-1], [1,-2,5] ];;
m[2]:= [ [-1,4,-3], [1,2,-1], [-1,-2,3] ];;
m[3]:= [ [-2,-3,-3], [-1,0,-1], [5,5,6] ];;
for i in [1,2,3] do
  Print("m[",i,"]=\n");
  Display(m[i]);
  Print("\n");
  Print("Eigenvalues  of m[",i,"]: ",Eigenvalues(Rationals, m[i]), "\n");
  Print("Eigenvectors of m[",i,"]: ",Eigenvectors(Rationals, m[i]), "\n");
  Print("CharacPloyns of m[",i,"]: ",CharacteristicPolynomial(m[i]), "\n");
  Print("\n");
od;
[ 5 ]
[ [ 1, 3, -2 ] ]
30+14*x_1-9*x_1^2+x_1^3

[  ]
[  ]
12-8*x_1-4*x_1^2+x_1^3

[ 2, 1 ]
[ [ 1, 1, 1 ], [ 1, 0, 3/5 ], [ 0, 1, 1/5 ] ]
-2+5*x_1-4*x_1^2+x_1^3

Remark: The other two eigenvalues of m[1] are $2\pm\sqrt{10}$.

m[1]=
[ [   1,   2,   3 ],
  [   2,   3,  -1 ],
  [   1,  -2,   5 ] ]

Eigenvalues  of m[1]: [ 5 ]
Eigenvectors of m[1]: [ [ 1, 3, -2 ] ]
CharacPloyns of m[1]: x_1^3-9*x_1^2+14*x_1+30

m[2]=
[ [  -1,   4,  -3 ],
  [   1,   2,  -1 ],
  [  -1,  -2,   3 ] ]

Eigenvalues  of m[2]: [  ]
Eigenvectors of m[2]: [  ]
CharacPloyns of m[2]: x_1^3-4*x_1^2-8*x_1+12

m[3]=
[ [  -2,  -3,  -3 ],
  [  -1,   0,  -1 ],
  [   5,   5,   6 ] ]

Eigenvalues  of m[3]: [ 2, 1 ]
Eigenvectors of m[3]: [ [ 1, 1, 1 ], [ 1, 0, 3/5 ], [ 0, 1, 1/5 ] ]
CharacPloyns of m[3]: x_1^3-4*x_1^2+5*x_1-2

Eigenvalues and eigenvectors

Eigenvalues and eigenvectors over GF(7)

Let us do the same calculation over GF(7)

o:= One( GF(7) );;
m:= [1..3];;
m[1]:= [ [1,2,3], [2,3,-1], [1,-2,5] ]*o;;
m[2]:= [ [-1,4,-3], [1,2,-1], [-1,-2,3] ]*o;;
m[3]:= [ [-2,-3,-3], [-1,0,-1], [5,5,6] ]*o;;
for i in [1, 2, 3] do
  Print("m[",i,"]=\n");
  Display(m[i]);
  Print("\n");
  Print("Eigenvalues  of m[",i,"]: ",Eigenvalues(GF(7), m[i]), "\n");
  Print("Eigenvectors of m[",i,"]: ",Eigenvectors(GF(7), m[i]), "\n");
  Print("CharacPloyns of m[",i,"]: ",CharacteristicPolynomial(m[i]), "\n");
  Print("\n");
od;
m[1]=
 1 2 3
 2 3 6
 1 5 5

Eigenvalues  of m[1]: [ Z(7)^5 ]
Eigenvectors of m[1]: [ [ Z(7)^0, Z(7), Z(7)^5 ] ]
CharacPloyns of m[1]: x_1^3+Z(7)^5*x_1^2+Z(7)^2

m[2]=
 6 4 4
 1 2 6
 6 5 3

Eigenvalues  of m[2]: [ Z(7) ]
Eigenvectors of m[2]: [ [ Z(7)^0, Z(7)^4, 0*Z(7) ] ]
CharacPloyns of m[2]: x_1^3+Z(7)*x_1^2-x_1+Z(7)^5

m[3]=
 5 4 4
 6 . 6
 5 5 6

Eigenvalues  of m[3]: [ Z(7)^0, Z(7)^2 ]
Eigenvectors of m[3]: [ [ Z(7)^0, 0*Z(7), Z(7)^2 ], [ 0*Z(7), Z(7)^0, Z(7) ], 
  [ Z(7)^0, Z(7)^0, Z(7)^0 ] ]
CharacPloyns of m[3]: x_1^3+Z(7)*x_1^2+Z(7)^5*x_1+Z(7)^5

Systems of linear equations

Solution of linear equation

If we are given a system of linear equations $XA=B$, where $B$ is a row vector, then we can find a solution to the equations (of course only if one exists).

A:= [[1,2,1],[1,-1,2],[1,2,1]];

[ [ 1, 2, 1 ], [ 1, -1, 2 ], [ 1, 2, 1 ] ]

B:=[1,1,4/3];

[ 1, 1, 4/3 ]

C:=SolutionMat(A,B);

[ 2/3, 1/3, 0 ]

C*A=B;

true

Systems of linear equations

Solution of linear equation

Now this only gives one solution, even when the system of equations has infinitely many solutions. The general solution is then SolutionMat(A, B) + v for any v in NullspaceMat(A). Let us check that fact for our particular example.

NullspaceMat(A);

[ [ -1, 0, 1 ] ]

Since the null space has dimension 1 the general solution will be the particular solution SolutionMat(A, B) plus any multiple of the basis vector for NullspaceMat(A). For example

M:= SolutionMat(A,B) + 5/11*NullspaceMat(A)[1];

[ 7/33, 1/3, 5/11 ]

M*A = B;

true

Systems of linear equations

Solution of linear equation

Here is another example.

A:= [[1,2,1,1],[-1,1,1,4],[0,-1,1,2],[-1,-4,-4,-8],[-5,1,-6,-5]];

[ [ 1, 2, 1, 1 ], [ -1, 1, 1, 4 ], [ 0, -1, 1, 2 ], [ -1, -4, -4, -8 ], [ -5, 1, -6, -5 ] ]

B:=[-1,-1,3,8];

[ -1, -1, 3, 8 ]

If we compute

NullspaceMat(A);

[ [ 2, 1, 1, 1, 0 ], [ 3, -2, 5, 0, 1 ] ]

we see that this time it is two dimensional. The general solution will be the particular solution SolutionMat(A, B) plus any linear combination of the basis vector for NullspaceMat(A).

Systems of linear equations

Solution of linear equation

For example

M:= SolutionMat(A,B) + 5/11*NullspaceMat(A)[1] - 3/4* NullspaceMat(A)[2];

[ -59/44, 65/22, -57/44, 5/11, -3/4 ]

will satisfy MA = B.

M*A = B;

true

Systems of linear equations

Whether ranks of A and the augmented matrix are equal

In these examples the system of equations has a solution. We could have checked this by seeing that the rank of A was equal to the rank of the augmented matrix

Rank(A);

3

To create the augmented matrix of the system we take a copy of A, then add the vector B as the final row.

augA:= ShallowCopy(A);

[ [ 1, 2, 1, 1 ], [ -1, 1, 1, 4 ], [ 0, -1, 1, 2 ], [ -1, -4, -4, -8 ], [ -5, 1, -6, -5 ] ]

Add(augA,B);

Now augA and A should have the same rank since our system had a solution.

Rank(augA) = Rank(A);

true

Systems of linear equations

Whether ranks of A and the augmented matrix are equal

Of course if the rank of the augmented matrix is different from the rank of A then the system has no solution. Here is an example.

B:=[1,-1,3,8];

[ 1, -1, 3, 8 ]

augA:= ShallowCopy(A);

[ [ 1, 2, 1, 1 ], [ -1, 1, 1, 4 ], [ 0, -1, 1, 2 ], [ -1, -4, -4, -8 ], [ -5, 1, -6, -5 ] ]
Add(augA,B);
Rank(augA) = Rank(A);
false

If we tried to solve XA = B, for this different row vector B, then we will find no solution to the equations and SolutionMat(A, B) will returnfail.

SolutionMat(A,B);

fail

Matrices over polynomial rings

We begin by defining R to be the ring of polynomials over the rational numbers in the indeterminate x. First we set up a list of names that GAP will use for the indeterminates; in this case it only contains one entry.

indetnames:= ["x"];

[ "x" ]

Now define R to be the polynomial ring in a single indeterminate which GAP will write as we have specified.

R:= PolynomialRing(Rationals, indetnames);

PolynomialRing(..., [ x ])

Now we want to use "x" for the name of the indeterminate so we set this up.

indets:= IndeterminatesOfPolynomialRing(R);

[ x ]

x:= indets[1];

x

We let o be the identity of R.

o:= One( R );

1

We must be careful when we define matrices over R to make sure we use the notation 2*o for the integer 2 in R. The element 2 itself is an integer, but not an element of R. Let us define a matrix over R.

mat:= [[o, x],[2*o + x, x^2]];

[ [ 1, x ], [ 2+x, x^2 ] ]

To check that mat is a matrix use the IsMatrix command.

IsMatrix( mat );

true

Note that the following will not define a matrix as the elements do not come from a ring (remember that 1 and 2 are not in R but x is in R).

mat1:= [ [1, x], [2+x, x^2] ];

[ [ 1, x ], [ 2+x, x^2 ] ]

IsMatrix(mat1);

false

We can carry out the usual matrix operations with mat.

mat^2;

[ [ 1+2*x+x^2, x+x^3 ], [ 2+x+2*x^2+x^3, 2*x+x^2+x^4 ] ]

mat^(-1);

[ [ -1/2*x, 1/2 ], [ x^-1+1/2, -1/2*x^-1 ] ]

To convert mat1 to a matrix we could multiply it by o.

mat1:= mat1*o;

[ [ 1, x ], [ 2+x, x^2 ] ]

IsMatrix(mat1);

true

mat1^(-1);

[ [ -1/2*x, 1/2 ], [ x^-1+1/2, -1/2*x^-1 ] ]

Determinant(mat1);

-2*x

Determinants of matrices over polynomial rings

We set up a polynomial ring over the rationals with 4 indeterminates. As before we first set up the names that GAP will use for the indeterminates, then set up the names that we can use for the indeterminates (which for convenience we make the same).

indetnames:= ["t","x","y","z"];;
R:= PolynomialRing(Rationals, indetnames);;
indets:= IndeterminatesOfPolynomialRing(R);
[ t, x, y, z ]
t:= indets[1];;
x:= indets[2];;
y:= indets[3];;
z:= indets[4];;

Here is a $4\times 4$ matrix over R in one indeterminate

o:= One( R );;
mat:= List([1..4], i -> [2^(i-1), 5^(i-1), 17^(i-1), x^(i-1)])*o;;
Display(mat);
[ [     1,     1,     1,     1 ],
  [     2,     5,    17,     x ],
  [     4,    25,   289,   x^2 ],
  [     8,   125,  4913,   x^3 ] ]

Factors(Determinant(mat));

[ -9180+540*x, -5+x, -2+x ]

GAP will factorise polynomials in one indeterminate but not polynomials with more than one indeterminate

o:= One(R);;
mat:= List([1..4], i -> [t^(i-1), x^(i-1), y^(i-1), z^(i-1)])*o;;
Display(mat);
[ [    1,    1,    1,    1 ],
  [    t,    x,    y,    z ],
  [  t^2,  x^2,  y^2,  z^2 ],
  [  t^3,  x^3,  y^3,  z^3 ] ]

Determinant(mat);

t^3*x^2*y-t^3*x^2*z-t^3*x*y^2+t^3*x*z^2+t^3*y^2*z-t^3*y*z^2-t^2*x^3*y+t^2*x^3*
z+t^2*x*y^3-t^2*x*z^3-t^2*y^3*z+t^2*\
y*z^3+t*x^3*y^2-t*x^3*z^2-t*x^2*y^3+t*x^2*z^3+t*y^3*z^2-t*y^2*z^3-x^3*y^2*z+x^3*
y*z^2+x^2*y^3*z-x^2*y*z^3-x*y^3*z^\
2+x*y^2*z^3

We define a matrix using a function

f:=function(i, j)
  if j < i then return x;
  else
    return -2;
  fi;
end;<
function( i, j ) ... end
n:= 6;;
mat:= List([1 .. n], i -> List([1 .. n], j -> f(i,j)))*o;;
Display(mat);
[ [  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2 ] ]

Determinant(mat);

64+160*x+160*x^2+80*x^3+20*x^4+2*x^5

Factors(Determinant(mat));

[ 4+2*x, 2+x, 2+x, 2+x, 2+x ]

Clearly there is a theorem here!

for n in [2..12] do
  mat:= List([1 .. n], i -> List([1 .. n], j -> f(i,j)))*o;;
  Display(mat);
  Print(Determinant(mat), "\n");
  Print(Factors(Determinant(mat)), "\n");
od;
[ [  -2,  -2 ],
  [   x,  -2 ] ]
4+2*x
[ 4+2*x ]
[ [  -2,  -2,  -2 ],
  [   x,  -2,  -2 ],
  [   x,   x,  -2 ] ]
-8-8*x-2*x^2
[ -4-2*x, 2+x ]
[ [  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2 ],
  [   x,   x,   x,  -2 ] ]
16+24*x+12*x^2+2*x^3
[ 4+2*x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,  -2 ] ]
-32-64*x-48*x^2-16*x^3-2*x^4
[ -4-2*x, 2+x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2 ] ]
64+160*x+160*x^2+80*x^3+20*x^4+2*x^5
[ 4+2*x, 2+x, 2+x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,  -2 ] ]
-128-384*x-480*x^2-320*x^3-120*x^4-24*x^5-2*x^6
[ -4-2*x, 2+x, 2+x, 2+x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,  -2 ] ]
256+896*x+1344*x^2+1120*x^3+560*x^4+168*x^5+28*x^6+2*x^7
[ 4+2*x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,  -2 ] ]
-512-2048*x-3584*x^2-3584*x^3-2240*x^4-896*x^5-224*x^6-32*x^7-2*x^8
[ -4-2*x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,   x,  -2 ] ]
1024+4608*x+9216*x^2+10752*x^3+8064*x^4+4032*x^5+1344*x^6+288*x^7+36*x^8+2*x^9
[ 4+2*x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,   x,   x,  -2 ] ]
-2048-10240*x-23040*x^2-30720*x^3-26880*x^4-16128*x^5-6720*x^6-1920*
x^7-360*x^8-40*x^9-2*x^10
[ -4-2*x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x ]
[ [  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,  -2,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,   x,  -2,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,   x,   x,  -2,  -2 ],
  [   x,   x,   x,   x,   x,   x,   x,   x,   x,   x,   x,  -2 ] ]
4096+22528*x+56320*x^2+84480*x^3+84480*x^4+59136*x^5+29568*x^6+10560*
x^7+2640*x^8+440*x^9+44*x^10+2*x^11
[ 4+2*x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x, 2+x ]

End






Thanks very much!

Welcome to visit my site: www.atzjg.net