Vector and Matrix Operations

# Maple Engine Operations 
# No packages are required for basic maple engine operations. 
# Define and display a vector like this:
             
 v := <1, -1>                                                        
 v[1];  v[2];  v;

# Maple treats vectors as columns.  Now define another vector w and do
# some simple computations:

 w := <1, 1>;
 v+w;     # vector or matrix addition
 v.w;     # dot product for vectors, matrix multiply otherwise

# Define two matrices by rows and by columns.

 A := Matrix([ [2,3], [1,2] ]);# Enter a matrix by rows
 B := <<1,1> | <0,1>>;         # Enter a matrix by columns
 C := <<2|3>,<1|2>>;           # Enter a matrix by rows, C == A.
 F := <2,3|1,2>^+;  # Ver 12+ shortcut, ^+ is transpose. F == A.
 
# Make an augmented matrix and an augmented vector from previous definitions.

 G := < A| v| w >; # Augment two columns to matrix A
 u:=<v,w>;         # Create a 4-dimensional vector

# Algebraic computations with matrices A and B and vectors v and w:

 A+B;    
 2*(A+B); 
 A.B;
 A.(v+w); 

# Change the individual entries of a matrix. Beware, it changes symbols A
# and B everywhere in the worksheet!

 A[1,1] := 5;  B[2,1] := 1;
 A,B;   # check

# Maple Engine Linear Algebra, since maple Ver 7 (2001), no packages.

  A:=Matrix([[1,2],[3,4]]);  # Enter A by rows
  R:=<<1|2>,<3|4>>;          # By row. 
  R:=<<1,3>|<2,4>>;          # By column
  A.R-3*R;       # Kernel matrix algebra, like matlab
  B:=<-1,1>;  # Column vector
  A.B;              # Matrix times vector
  1/A; A^(-1);  # Matrix inverse

# Solve linear systems, since maple Ver 7 (2001). No packages.

  A:=Matrix([[1,2],[3,4]]);X:=<x,y>;B:=<-1,1>;
  Q:=A.X-B;            # Represent A.X=B as Q=<0,0>
  sys:=convert(Q,set); # Convert A.X=B to scalar equations.
  solve(sys);          # Linear system solve for unique x,y.
  <x,y> = A^(-1).B;    # Inversion solve of AX=B for unique x,y
  C:=<<1,2>|<1,2>>; # C has no inverse, infinitely many or no solution.
  sys:=convert(C.X,set);solve(sys);   # Solve CX=0, free variables
  sys:=convert(C.X-B,set);solve(sys); # No solution to CX=B

# Shortcuts in maple Ver 9 and higher

  A:=Matrix([[1,2],[3,4]]);
  C:=A^%T;        # Transpose, since Ver 9 (2003)
  K:=<1,3|2,4>;   # K==Matrix([[1,2],[3,4]]), since Ver 12 (2008)
  J:=<1,2|3,4>^+; # By columns, then transpose, J==K, since Ver 12        

# LinearAlgebra package.

# This package is used to extend the basic operations illustrated above.
# The long forms avoid loading a package, giving bulletproof code.

 LinearAlgebra[Determinant](A); LinearAlgebra[Determinant](B);
 with(LinearAlgebra): # load the package to shorten commands
 Determinant(A-B); Determinant(A+B); Eigenvectors(A);

# Shortcut: To complete a long command, use the ESC key. Prevents typing
# errors.

# Symbolic matrices are as legitimate as numerical ones:

 A := Matrix([ [a,b], [c,d] ]);
 Determinant(A);

#  Reduced Echelon Form of a matrix

 C := Matrix([ [3,2,2], [3,1,2], [1,1,1] ]);
 LinearAlgebra[ReducedRowEchelonForm](C);
 linalg[rref](C);
 linalg[gaussjord](C);

# Elimination Steps
# The hand work on paper can be done error free by defining operations in
# terms of a linear algebra package, which do the three basic toolkit
# operations combination, swap, multiply. Here's the definitions which
# makes this process identical to what is done with paper and pencil.

# A set of Elimination Toolkit macros can be defined for the deprecated
# linalg package.

 macro(combo=linalg[addrow],swap=linalg[swaprow],mult=linalg[mulrow]);
 C1 := Matrix([ [3,2,2], [3,1,2], [1,1,1] ]);
 C2:=combo(C1,1,2,-1);
 C3:=combo(C2,1,3,-1/3);
 C4:=combo(C3,2,3,1/3);
 C5:=mult(C4,2,-1);
 C6:=mult(C5,3,3);
 C7:=combo(C6,2,1,-2);
 C8:=combo(C7,3,1,-2);
 C9:=mult(C8,1,1/3);
 linalg[rref](C1);
 LinearAlgebra[ReducedRowEchelonForm](C1);

# A set of Elimination Toolkit macros can be defined for the
# LinearAlgebra package. 
 
# Reversible operations. a=matrix, s=source, t=target, c=constant
 macro(combo=combo,swap=swap,mult=mult); # Erase macro definitions
 combo:=(a,s,t,c)->RowOperation(a,[t,s],c); 
     # Replace row t by c times row s added to row t.
 swap:=(a,s,t)->RowOperation(a,[t,s]); # Swap rows s and t
 mult:=(a,t,c)->RowOperation(a,t,c);  
     # Replace row t by c times row t. Illegal: c=0
 C1 := Matrix([ [3,2,2], [3,1,2], [1,1,1] ]);
 C2:=combo(C1,1,2,-1);
 C3:=combo(C2,1,3,-1/3);
 C4:=combo(C3,2,3,1/3);
 C5:=mult(C4,2,-1);
 C6:=mult(C5,3,3);
 C7:=combo(C6,2,1,-2);
 C8:=combo(C7,3,1,-2);
 C9:=mult(C8,1,1/3);
 LinearAlgebra[ReducedRowEchelonForm](C1);

# Elimination tutor

# On maple menus, Tools --> Tutors --> Linear Algebra --> Gaussian
# Elimination produces a tutor for learning combo, swap, multiply ideas.
# It is too clumsy for daily use (use the macros above), but useful on
# the first days with the topic.

 Student[LinearAlgebra][GaussianEliminationTutor]();