前言

北大丘维声教授清华高等代数课程1080P高清修复版(全151集)

参考教材:蓝以中《高等代数简明教程》、丘维声《高等代数》

文中代码主要是用包含线性代数的函数的numpy.linalg模块。使用这个模块,可以计算矩阵逆、求特征值、解线性方程组以及求解行列式等。

第一章 代数学的经典课题

引言

§1 若干准备知识

1.复数的基本知识

2.数域的概念

3.集合论的若干概念

4.求和号与乘积号

5.充分必要条件

§2 一元高次代数方程的基础知识

1.高等代数的基本定理

2.根的基本性质

3.实数域上代数方程的根

§3 线性方程组

1.线性方程组概述

2.线性方程组的解法

numpy.linalg 中的 solve 函数可以求解形如 Ax = b 的线性方程组,其中 A 为矩阵,b 为一维或二维的数组,x 为未知变量。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import numpy as np
#创建矩阵和数组
A = np.mat('1 -2 1;0 2 -8;-4 5 9')
b = np.array([0,8,-9])

#调用 solve 函数求解线性方程
x = np.linalg.solve(A,b)
print(x)
#out:[29. 16. 3]
#使用 dot 函数检查求得的解是否正确
print(np.dot(A,x))
#out:[[0. 8. -9.]]

3.齐次线性方程组

第二章 向量空间与矩阵

§1 m维向量空间

1.向量组的线性相关与线性无关

2.向量组的秩

3.集合内的等价关系

§2 矩阵的秩

§3 线性方程组的理论课题

1.齐次线性方程组的基础解系

2.基础解系的求法

3.线性方程组的一般理论

§4 矩阵的运算

1.矩阵的加法和数乘

2.矩阵的乘法运算

np.dot()函数:对于秩为1的数组,执行对应位置相乘,然后再相加。对于秩不为1的二维数组,执行矩阵乘法运算。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import numpy as np
# 定义两个矩阵
a = np.array([[0,-3,0,3],[-2,-7,0,13],[0,-3,0,3], [-1,-4,0,7]])
print(a)
b = np.array([[0,-3,0,3],[-2,-7,0,13],[0,-3,0,3], [-1,-4,0,7]])
print(b)
# 计算矩阵乘积
c = np.dot(a, b)
# 打印结果
print(c)

输出结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[[ 0 -3 0 3] 
[-2 -7 0 13] 
[ 0 -3 0 3] 
[-1 -4 0 7]] 

[[ 0 -3 0 3] 
[-2 -7 0 13] 
[ 0 -3 0 3] 
[-1 -4 0 7]] 

[[ 3 9 0 -18] 
[ 1 3 0 -6] 
[ 3 9 0 -18] 
[ 1 3 0 -6]]

乘法符号运算:对数组执行对应位置相乘,对矩阵执行矩阵乘法运算

1
2
3
4
import numpy as np
a = np.array([[0,-3,0,3],[-2,-7,0,13],[0,-3,0,3],[-1,-4,0,7]])
a = np.mat(a)
print(a*a)

输出结果

1
2
3
4
[[ 3 9 0 -18] 
[ 1 3 0 -6] 
[ 3 9 0 -18] 
[ 1 3 0 -6]]

np.multiply()函数:数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致

1
2
3
4
5
6
7
8
9
import numpy as np
a = np.array([[0,-3,0,3],[-2,-7,0,13],[0,-3,0,3],[-1,-4,0,7]])
a = np.mat(a)
print(a)
b = np.array([[0,-3,0,3],[-2,-7,0,13],[0,-3,0,3],[-1,-4,0,7]])
b = np.mat(b)
print(b)
c = np.multiply(a,b)
print(c)

输出结果

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[[ 0 -3 0 3] 
[-2 -7 0 13] 
[ 0 -3 0 3] 
[-1 -4 0 7]] 

[[ 0 -3 0 3] 
[-2 -7 0 13] 
[ 0 -3 0 3] 
[-1 -4 0 7]] 

[[ 0 9 0 9] 
[ 4 49 0 169] 
[ 0 9 0 9] 
[ 1 16 0 49]]

3.矩阵乘法的几何意义

4.矩阵乘法的基本性质

5.矩阵运算和秩的关系

§5 n阶方阵

1.数域上的n阶方阵

2.n阶初等矩阵

3.逆矩阵

4.几类特殊的n阶方阵

§6 分块矩阵

1.准对角矩阵

2.分块矩阵的秩

3.矩阵的分块求逆

第三章 行列式

§1 平行六面体的有向体积

§2 n阶方阵的行列式

1.行列式的定义

2.行列式的性质

3.行列式对任意行(列)的展开公式

4.行列式的其他重要性质

1
2
3
4
5
6
import numpy as np
# 计算矩阵的行列式
F = np.mat("1 2;1 1")
# 使用det函数计算行列式
print(np.linalg.det(F))
# -1.0

§3行列式的初步应用

1.齐次线性方程组

2.逆矩阵

使用inv函数计算逆矩阵。

1
2
3
4
import numpy as np
A = np.mat('0 1 2;1 0 3;4 -3 8')
inv = np.linalg.inv(A)
print(inv)

输出结果:

1
2
3
[[-4.5 7. -1.5] 
[-2. 4. -1. ] 
[ 1.5 -2. 0.5]]

使用numpy.linalg模块中的pinv函数求解广义逆矩阵。inv函数只接受方阵作为输入矩阵,而pinv函数则没有这个限制。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import numpy as np
# 创建一个矩阵
Matrix = np.mat("4 11 14;8 7 -2")
# 使用pinv函数计算广义逆矩阵
pseudoinv = np.linalg.pinv(E)

print(pseudoinv)
#[[-0.00555556 0.07222222]
# [ 0.02222222 0.04444444]
# [ 0.05555556 -0.05555556]]

# 将原矩阵和得到的广义逆矩阵相乘
print(Matrix*pseudoinv)
#[[ 1.00000000e+00 -5.55111512e-16]
# [ 0.00000000e+00 1.00000000e+00]]

3.矩阵乘积的行列式

4.矩阵的秩与行列式

§4行列式的完全展开式

§5 Laplace展开式与Binet—Cauchy公式

第四章 线性空间与线性变换

引言

§1 线性空间的基本概念

1.线性空间的定义和实例

2.线性空间的基本属性

3.线性空间的基本概念

4.基和维数

5.向量的坐标

6.基变换与坐标变换

7.Kn中的基变换

§2 子空间与商空间

1.子空间的基本概念

2.子空间的交与和

3.子空间的直和

4.商空间

§3 线性映射与线性变换

1.线性映射

2.线性空间的同构

3.线性映射的核、像集和余核

4.线性映射的运算

5.线性映射的矩阵

6.线性变换的基本概念

7.线性变换在不同基下的矩阵

§4 线性变换的特征值与特征向量

1.特征值与特征向量的定义

2.特征值与特征向量的计算法

numpy.linalg模块中,eigvals函数可以计算矩阵的特征值,而eig函数可以返回一个包含特征值和对应的特征向量的元组。

1
2
3
4
5
6
7
import numpy as np

#创建一个矩阵
Matrix = np.mat('3 -2;1 0')
#调用eigvals函数求解特征值
eigenvalues = np.linalg.eigvals(Matrix)
print(eigenvalues)#out:[2. 1.]

使用 eig 函数求解特征值和特征向量(该函数将返回一个元组,按列排放着特征值和对应的特征向量,其中第一列为特征值,第二列为特征向量)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import numpy as np

array = np.array([[1/2,1/2,1/2,1/2],[1/2,1/2,-1/2,-1/2],[-1/2,1/2,-1/2,1/2],[-1/2,1/2,1/2,-1/2]])
matrix = np.mat(array)
eigenvalues,eigenvectors=np.linalg.eig(matrix) #传入两个变量

print(eigenvalues)
print(eigenvectors)

#使用 dot 函数验证求得的解是否正确‘
for i in range(len(eigenvalues)):
  print('left:',np.dot(matrix,eigenvectors[:,i]))
  print('right:',eigenvalues[i] * eigenvectors[:i])

输出结果:

1
2
3
4
5
6
7
8
9
[ 1.+0.j 0.+1.j 0.-1.j -1.+0.j] [[-7.07106781e-01+0.00000000e+00j 5.00000000e-01+3.72919427e-17j 5.00000000e-01-3.72919427e-17j -3.94864622e-17+0.00000000e+00j] [-7.07106781e-01+0.00000000e+00j -5.00000000e-01+0.00000000e+00j -5.00000000e-01-0.00000000e+00j 2.21595527e-16+0.00000000e+00j] [ 2.79683821e-16+0.00000000e+00j 1.91497458e-16+5.00000000e-01j 1.91497458e-16-5.00000000e-01j -7.07106781e-01+0.00000000e+00j] [ 1.69528880e-16+0.00000000e+00j 1.98242254e-16+5.00000000e-01j 1.98242254e-16-5.00000000e-01j 7.07106781e-01+0.00000000e+00j]] 
left: [[-7.07106781e-01+0.j] [-7.07106781e-01+0.j] [ 5.55111512e-17+0.j] [ 1.66533454e-16+0.j]] 
right: [] 
left: [[ 0.00000000e+00+5.00000000e-01j] [-3.88578059e-16-5.00000000e-01j] [-5.00000000e-01+1.11022302e-16j] [-5.00000000e-01-1.66533454e-16j]] 
right: [[-0.00000000e+00-7.07106781e-01j -3.72919427e-17+5.00000000e-01j 3.72919427e-17+5.00000000e-01j -0.00000000e+00-3.94864622e-17j]] 
left: [[ 0.00000000e+00-5.00000000e-01j] [-3.88578059e-16+5.00000000e-01j] [-5.00000000e-01-1.11022302e-16j] [-5.00000000e-01+1.66533454e-16j]] 
right: [[ 0.00000000e+00+7.07106781e-01j 3.72919427e-17-5.00000000e-01j -3.72919427e-17-5.00000000e-01j 0.00000000e+00+3.94864622e-17j] [ 0.00000000e+00+7.07106781e-01j 0.00000000e+00+5.00000000e-01j -0.00000000e+00+5.00000000e-01j 0.00000000e+00-2.21595527e-16j]] 
left: [[ 1.66533454e-16+0.j] [ 5.55111512e-17+0.j] [ 7.07106781e-01+0.j] [-7.07106781e-01+0.j]] 
right: [[ 7.07106781e-01-0.00000000e+00j -5.00000000e-01-3.72919427e-17j -5.00000000e-01+3.72919427e-17j 3.94864622e-17-0.00000000e+00j] [ 7.07106781e-01-0.00000000e+00j 5.00000000e-01-0.00000000e+00j 5.00000000e-01+0.00000000e+00j -2.21595527e-16+0.00000000e+00j] [-2.79683821e-16+0.00000000e+00j -1.91497458e-16-5.00000000e-01j -1.91497458e-16+5.00000000e-01j 7.07106781e-01-0.00000000e+00j]]

3.特征多项式的基本性质

4.具有对角形矩阵的线性变换

5.不变子空间

6.商空间中的诱导变换

第五章 双线性函数与二次型

§1 双线性函数

1.线性与双线性函数

2.双线性函数在不同基下的矩阵

3.对称双线性函数

§2 二次型

1.二次型的标准形

2.二次型标准形的计算方法

§3 实与复二次型的分类

1.复二次型的分类

2.实二次型的分类

§4 正定二次型

第六章 带度量的线性空间

1 欧几里得空间的定义和基本性质

SVD(Singular Value Decomposition,奇异值分解)是一种因子分解运算,将一个矩阵分解为3个矩阵的乘积。

numpy.linalg模块中的svd函数可以对矩阵进行奇异值分解。该函数返回3个矩阵——U、Singma和V,其中U和V是正交矩阵,Sigma包含输入矩阵的奇异值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
#分解矩阵
Matrix = np.mat('4 11 14;8 7 -2')
#使用svd函数分解矩阵
U,Sigma,V = np.linalg.svd(Matrix, full_matrices=False)
print("U:",U)
#U:[[-0.9486833 -0.31622777]
#[-0.31622777 0.9486833 ]]

print("Sigma:",Sigma)
#Sigma: [ 18.97366596 9.48683298]

print ("V",V)
#V [[-0.33333333 -0.66666667 -0.66666667]
# [ 0.66666667 0.33333333 -0.66666667]]

#使用diag函数生成完整的奇异值矩阵。将分解出的3个矩阵相乘
print(U * np.diag(Sigma) * V)
#[[ 4. 11. 14.]
# [ 8. 7. -2.]]

2 欧几里得空间中的特殊线性变换

3 酉空间

4 四维时空空间与辛空间

第七章 线性变换的Jordan标准形

1 幂零线性变换的Jordan标准形

2 一般线性变换的Jordan标准形

3 最小多项式

4 矩阵函数

第八章 有理整数环

1 有理整数环的基本概念

2 同余式

3 模m的剩余类环

第九章 一元多项式环

1 一元多项式环的基本理论

2 C,R,Q上多项式的因式分解

3 实系数多项式根的分布

4 单变早班有理函数域

第十章 多元多项式环

1 多元多项式环的基本概念

2 对称多项式

3 结式

第十一章 n维仿射空间与n维射影空间

1 n维仿射空间

2 n维射影空间

第十二章 张量积与外代数

1 多重线性映射

2 线性空间的张量积

3 张量

4 外代数