Introduction

You may use Colab for Python and RStudio Cloud.

Session 2

Learn SymPy.

import sympy
M=sympy.Matrix(
  [[5, 2, 1, 0],
  [1, -8, 0, -1],
  [0, -4, 6, 7]])
M.rref()
(Matrix([
[1, 0, 0,   -9/32],
[0, 1, 0,  23/256],
[0, 0, 1, 157/128]]), (0, 1, 2))

Learn matlib.

library(matlib)
A <- matrix(c(5, 2, 1,
              1, -8, 0,
              0, -4, 6), 3, 3, byrow=TRUE)
b <- c(0, -1, 7)
echelon(A, b, verbose=TRUE, fractions=TRUE) # reduced row-echelon form

Initial matrix:
     [,1] [,2] [,3] [,4]
[1,]  5    2    1    0  
[2,]  1   -8    0   -1  
[3,]  0   -4    6    7  

row: 1 

 multiply row 1 by 1/5 
     [,1] [,2] [,3] [,4]
[1,]   1  2/5  1/5    0 
[2,]   1   -8    0   -1 
[3,]   0   -4    6    7 

 subtract row 1 from row 2 
     [,1]  [,2]  [,3]  [,4] 
[1,]     1   2/5   1/5     0
[2,]     0 -42/5  -1/5    -1
[3,]     0    -4     6     7

row: 2 

 multiply row 2 by -5/42 
     [,1] [,2] [,3] [,4]
[1,]    1  2/5  1/5    0
[2,]    0    1 1/42 5/42
[3,]    0   -4    6    7

 multiply row 2 by 2/5 and subtract from row 1 
     [,1]  [,2]  [,3]  [,4] 
[1,]     1     0  4/21 -1/21
[2,]     0     1  1/42  5/42
[3,]     0    -4     6     7

 multiply row 2 by 4 and add to row 3 
     [,1]   [,2]   [,3]   [,4]  
[1,]      1      0   4/21  -1/21
[2,]      0      1   1/42   5/42
[3,]      0      0 128/21 157/21

row: 3 

 multiply row 3 by 21/128 
     [,1]    [,2]    [,3]    [,4]   
[1,]       1       0    4/21   -1/21
[2,]       0       1    1/42    5/42
[3,]       0       0       1 157/128

 multiply row 3 by 4/21 and subtract from row 1 
     [,1]    [,2]    [,3]    [,4]   
[1,]       1       0       0   -9/32
[2,]       0       1    1/42    5/42
[3,]       0       0       1 157/128

 multiply row 3 by 1/42 and subtract from row 2 
     [,1]    [,2]    [,3]    [,4]   
[1,]       1       0       0   -9/32
[2,]       0       1       0  23/256
[3,]       0       0       1 157/128
library(matlib)
A <- matrix(
c(1, 5,
-2, -7), 2, 2, byrow=TRUE)
b <- c(7, -5)
echelon(A, b, verbose=TRUE, fractions=TRUE)

Initial matrix:
     [,1] [,2] [,3]
[1,]  1    5    7  
[2,] -2   -7   -5  

row: 1 

 exchange rows 1 and 2 
     [,1] [,2] [,3]
[1,] -2   -7   -5  
[2,]  1    5    7  

 multiply row 1 by -1/2 
     [,1] [,2] [,3]
[1,]   1  7/2  5/2 
[2,]   1    5    7 

 subtract row 1 from row 2 
     [,1] [,2] [,3]
[1,]   1  7/2  5/2 
[2,]   0  3/2  9/2 

row: 2 

 multiply row 2 by 2/3 
     [,1] [,2] [,3]
[1,]   1  7/2  5/2 
[2,]   0    1    3 

 multiply row 2 by 7/2 and subtract from row 1 
     [,1] [,2] [,3]
[1,]  1    0   -8  
[2,]  0    1    3  
library(matlib)
A <- matrix(c(0, 1, 4,
              1, 3, 5,
              3, 7, 7), 3, 3, byrow=TRUE)
b <- c(-5, -2, 6)
echelon(A, b, verbose=TRUE, fractions=TRUE) # reduced row-echelon form

Initial matrix:
     [,1] [,2] [,3] [,4]
[1,]  0    1    4   -5  
[2,]  1    3    5   -2  
[3,]  3    7    7    6  

row: 1 

 exchange rows 1 and 3 
     [,1] [,2] [,3] [,4]
[1,]  3    7    7    6  
[2,]  1    3    5   -2  
[3,]  0    1    4   -5  

 multiply row 1 by 1/3 
     [,1] [,2] [,3] [,4]
[1,]   1  7/3  7/3    2 
[2,]   1    3    5   -2 
[3,]   0    1    4   -5 

 subtract row 1 from row 2 
     [,1] [,2] [,3] [,4]
[1,]   1  7/3  7/3    2 
[2,]   0  2/3  8/3   -4 
[3,]   0    1    4   -5 

row: 2 

 exchange rows 2 and 3 
     [,1] [,2] [,3] [,4]
[1,]   1  7/3  7/3    2 
[2,]   0    1    4   -5 
[3,]   0  2/3  8/3   -4 

 multiply row 2 by 7/3 and subtract from row 1 
     [,1] [,2] [,3] [,4]
[1,]    1    0   -7 41/3
[2,]    0    1    4   -5
[3,]    0  2/3  8/3   -4

 multiply row 2 by 2/3 and subtract from row 3 
     [,1] [,2] [,3] [,4]
[1,]    1    0   -7 41/3
[2,]    0    1    4   -5
[3,]    0    0    0 -2/3

row: 3 

Session 3

library(matlib)
A <- matrix(c(13, -4, 2, -4, 11, -2, 2, -2, 8), 3,3)
b <- c(1,2,4)
plotEqn3d(A,b)

Session 4

Session 5

import sympy
a,b,c,d=sympy.symbols("a,b,c,d")
M=sympy.Matrix(
[[a, b],
[c, d]])
N=sympy.Matrix(
[[5, 2, 1, 0],
[1, -8, 0, -1]])
M*N
Matrix([
[5*a + b, 2*a - 8*b, a, -b],
[5*c + d, 2*c - 8*d, c, -d]])
M.T
Matrix([
[a, c],
[b, d]])
M**-1
Matrix([
[ d/(a*d - b*c), -b/(a*d - b*c)],
[-c/(a*d - b*c),  a/(a*d - b*c)]])
M.det()
a*d - b*c
import numpy
M=numpy.array(
[[5, 2],
[1, -8]])
N=numpy.array(
[[5, 2, 1, 0],
[1, -8, 0, -1]])
numpy.matmul(M,N)
array([[27, -6,  5, -2],
       [-3, 66,  1,  8]])
M.transpose()
array([[ 5,  1],
       [ 2, -8]])
numpy.linalg.inv(M) 
array([[ 0.19047619,  0.04761905],
       [ 0.02380952, -0.11904762]])
numpy.linalg.det(M) 
-41.999999999999986
M <- matrix(c(5, 2,
              1, -8), 2, 2, byrow=TRUE)
N <- matrix(c(5, 2, 1, 0,
              1, -8, 0, -1), 2, 4, byrow=TRUE)
M%*%N
     [,1] [,2] [,3] [,4]
[1,]   27   -6    5   -2
[2,]   -3   66    1    8
t(M)
     [,1] [,2]
[1,]    5    1
[2,]    2   -8
solve(M)
           [,1]        [,2]
[1,] 0.19047619  0.04761905
[2,] 0.02380952 -0.11904762
det(M)
[1] -42
import sympy
A=sympy.Matrix(
    [[0, -1],
    [-1, 2]])
A**-1
Matrix([
[-2, -1],
[-1,  0]])
import sympy
a,b,c,d = sympy.symbols("a,b,c,d")
A=sympy.Matrix(
    [[a, b],
    [c, d]])
A**-1
Matrix([
[ d/(a*d - b*c), -b/(a*d - b*c)],
[-c/(a*d - b*c),  a/(a*d - b*c)]])
import sympy
A=sympy.Matrix(
    [[1, 2, 3],
    [4, 5, 6]])
B=sympy.Matrix(
    [[7, 10],
    [8, 11], 
    [9, 12]])
A*B
Matrix([
[ 50,  68],
[122, 167]])
A.transpose()
Matrix([
[1, 4],
[2, 5],
[3, 6]])
(A*A.transpose())**-1
Matrix([
[ 77/54, -16/27],
[-16/27,   7/27]])
import numpy
A=numpy.array(
    [[1, 2, 3],
    [4, 5, 6]])
B=numpy.array(
    [[7, 10],
    [8, 11], 
    [9, 12]])
numpy.matmul(A, B)
array([[ 50,  68],
       [122, 167]])
A.transpose()
array([[1, 4],
       [2, 5],
       [3, 6]])
library(matlib)
A <- matrix(c(1, 2, 3,
            4, 5, 6), 2, 3, byrow=TRUE)
B <- matrix(c(7, 10,
            8, 11,
            9, 12), 3, 2, byrow=TRUE)
A%*%B
     [,1] [,2]
[1,]   50   68
[2,]  122  167
t(A)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
solve(A%*%t(A))
           [,1]       [,2]
[1,]  1.4259259 -0.5925926
[2,] -0.5925926  0.2592593

Session 6

import sympy
M=sympy.Matrix(
[[2, 1],
[3, 5]])
M**-1
Matrix([
[ 5/7, -1/7],
[-3/7,  2/7]])
M.det()
7
N=sympy.Matrix(
[[2, 1, 4],
[3, 5, 2],
[2, 1, 0]])
N**-1
Matrix([
[1/14, -1/7, 9/14],
[-1/7,  2/7, -2/7],
[ 1/4,    0, -1/4]])
N.det()
-28
P=sympy.Matrix(
[[2, 1, 4, 5],
[3, 5, 0, 0],
[2, 1, 0, 1],
[4, 1, 0, 0]])
P**-1
Matrix([
[  0, -1/17,    0,  5/17],
[  0,  4/17,    0, -3/17],
[1/4,  2/17, -5/4,  7/17],
[  0, -2/17,    1, -7/17]])
P.det()
68
P=sympy.Matrix(
[[2, 1, 4, 5, 4],
[3, 5, 0, 0, 3],
[2, 1, 0, 1, 2],
[4, 1, 0, 0, 1],
[0, 0, 0, 5, 0]])
P**-1
Matrix([
[  0, -1/21,  -2/21,  1/3,   2/105],
[  0,   2/7,   -3/7,    0,    3/35],
[1/4,  1/21, -55/84,  1/6,   -5/42],
[  0,     0,      0,    0,     1/5],
[  0, -2/21,  17/21, -1/3, -17/105]])
P.det()
-420
M=sympy.Matrix(
[[2, 1],
[1, 3]])
b=sympy.Matrix(
[[6],
[7]])
M**-1*b
Matrix([
[11/5],
[ 8/5]])
M.det()
5
N=sympy.Matrix(
[[1, 2, 3],
[4, 5, 6],
[1, 0, 1]])
N**-1
Matrix([
[-5/6,  1/3, 1/2],
[-1/3,  1/3,  -1],
[ 5/6, -1/3, 1/2]])
N.det()
-6

Session 7

import sympy
P=sympy.Matrix(
[[2, 1, 4, 5, 4],
[3, 5, 0, 0, 0],
[2, 1, 0, 0, 2]])
P.nullspace()
[Matrix([
[   0],
[   0],
[-5/4],
[   1],
[   0]]), Matrix([
[-10/7],
[  6/7],
[ -1/2],
[    0],
[    1]])]
P.columnspace()
[Matrix([
[2],
[3],
[2]]), Matrix([
[1],
[5],
[1]]), Matrix([
[4],
[0],
[0]])]

Session 8

import sympy
lamda = sympy.symbols('lamda')
N=sympy.Matrix(
[[0.8, 0.3],
[0.2, 0.7]])
N.eigenvals()
{1.00000000000000: 1, 0.500000000000000: 1}
N.eigenvects()
[(1.00000000000000, 1, [Matrix([
[0.832050294337844],
[0.554700196225229]])]), (0.500000000000000, 1, [Matrix([
[-0.721110255092798],
[ 0.721110255092798]])])]
N.charpoly(lamda)
PurePoly(1.0*lamda**2 - 1.5*lamda + 0.5, lamda, domain='RR')
N.diagonalize()
(Matrix([
[0.832050294337844, -0.721110255092798],
[0.554700196225229,  0.721110255092798]]), Matrix([
[1.0,   0],
[  0, 0.5]]))
import numpy
N=numpy.array(
[[0.8, 0.3],
[0.2, 0.7]])
numpy.linalg.eig(N)
(array([1. , 0.5]), array([[ 0.83205029, -0.70710678],
       [ 0.5547002 ,  0.70710678]]))
library(matlib)
N <- matrix(c(0.8, 0.3,
           0.2, 0.7), 2, 2, byrow=TRUE)
eigen(N) # base
eigen() decomposition
$values
[1] 1.0 0.5

$vectors
          [,1]       [,2]
[1,] 0.8320503 -0.7071068
[2,] 0.5547002  0.7071068
C <- matrix(c(1,2,3,
              2,5,6,
              3,6,10), 3, 3) # nonsingular, symmetric
eigen(C) # base
eigen() decomposition
$values
[1] 14.93303437  1.00000000  0.06696563

$vectors
           [,1]          [,2]       [,3]
[1,] -0.2505248 -9.853455e-16  0.9681102
[2,] -0.5370109 -8.320503e-01 -0.1389662
[3,] -0.8055164  5.547002e-01 -0.2084492
Eigen(C)
$values
[1] 14.93303437  1.00000000  0.06696563

$vectors
          [,1]          [,2]       [,3]
[1,] 0.2505248 -1.041818e-09 -0.9681102
[2,] 0.5370109  8.320503e-01  0.1389662
[3,] 0.8055164 -5.547002e-01  0.2084492
showEig(C)
Warning in showEig(C): 'X' has TRUE columns. Only the first two are used

Session 9

import sympy
a=sympy.Matrix(
[[1],
[2]])
b=sympy.Matrix(
[[3],
[4]])
a.T*b
Matrix([[11]])
import numpy
a = numpy.array([1,2,3])
b = numpy.array([0,1,0])
numpy.inner(a, b)
2
a <- c(1, 2, 4, 5)
b <- c(-1, 2, 3, 4)
t(a)%*%b
     [,1]
[1,]   35
sum(a*b)
[1] 35