内容简介
线性代数是代数学甚至整个数学中非常重要的一个分支,是大中专院校理工科相关专业的必修课,也是学习机器学习、计算机图形学、游戏编程等的基础。但是由于线性代数太过抽象,会让许多人学完整门课程也不知其所以然。《Python线性代数及编程实践》通过Python编程的方式让抽象的知识变得可视化,通过编程将线性代数应用于实践,解决具体的问题,可以帮助读者更好地理解线性代数。具体内容包括数学基础和Python、线性空间和线性映射、基和维数、矩阵、矩阵的初等变换和不变量、范数和内积、特征值和特征向量、若尔当标准型和矩阵的谱集、动力学系统、线性代数的应用与发展。
《Python线性代数及编程实践》用编程的方式学习线性代数特别适合大中专院校理工科专业学生,以及想学习机器学习、3D游戏制作等但数学基础薄弱的程序员参考学习。
目录
准备
0.1 在Windows中安装 1
0.2 在Mac中安装 1
0.3 在Raspberry Pi中安装 2
0.4 Python的启动 3
0.5 库的使用 5
0.6 VPython的使用 9
0.7 Python的语法 10
0.8 import语句 13
0.9 Jupyter Notebook的使用 14
0.10 LATEX等其他工具 18
第1章 数学基础和Python 2
1.1 命题 22
1.2 实数和复数 24
1.3 集合 27
1.4 有序对和元组 32
1.5 映射和函数 33
1.6 Python中的类和对象 36
1.7 列表、数组及矩阵 38
第2章 线性空间和线性映射 50
2.1 线性空间 50
2.2 子空间 60
2.3 线性映射 62
2.4 应用:观察声音 66
第3章 基和维数 70
3.1 有限维数线性空间 70
3.2 线性独立和线性回归 76
3.3 基及其表示 81
3.4 维数和阶数 84
3.5 与维数相关的注意事项 90
第4章 矩阵 93
4.1 矩阵的操作 93
4.2 矩阵和线性映射 97
4.3 线性映射的合成和矩阵乘积 102
4.4 逆矩阵、基的转换和矩阵相似性 110
4.5 复共轭矩阵 115
4.6 测量计算矩阵所需的时间 117
第5章 矩阵的初等变换和不变量 120
5.1 初等矩阵和初等变换 120
5.2 矩阵的阶数 126
5.3 行列式 129
5.4 迹 138
5.5 联立方程式 140
5.6 逆矩阵 145
第6章 范数和内积 149
6.1 范数和内积的应用 149
6.2 标准正交系统和正交投影 154
6.3 函数空间 164
6.4 最小二乘法、三角数列和傅里叶数列 167
6.5 正交函数系统 173
6.6 向量序列的收敛性 178
6.7 傅里叶分析 181
第7章 特征值和特征向量 188
7.1 矩阵的种类 188
7.2 特征值 192
7.3 对角化 201
7.4 矩阵范数和矩阵函数 209
第8章 若尔当标准型和矩阵的谱集 220
8.1 直和分解 220
8.2 若尔当分解 223
8.3 若尔当分解和矩阵的幂 235
8.4 矩阵的谱集 238
8.5 弗罗贝尼乌斯-佩龙定理 244
第9章 动力学系统 248
9.1 向量和矩阵值函数的微分 248
9.2 牛顿的运动方程式 250
9.3 线性微分方程 255
9.4 静止的马尔可夫过程的平衡状态 260
9.5 马尔可夫随机场 264
9.6 幺半群和生成矩阵 273
第10章 线性代数的应用与发展 278
10.1 联立方程式和最小二乘法 278
10.2 广义逆矩阵和奇异值分解 285
10.3 张量乘积 291
10.4 向量值随机变量的张量表示法 298
10.5 主成分分析和KL扩展 302
10.6 通过线性回归对随机变量的实现进行估计 313
10.7 卡尔曼滤波器 318
前言/序言
关于本书
本书是为想学习“线性代数应用”的读者准备的线性代数基础教科书。为了理解具体的应用,必须正确理解抽象的基础理论。
线性代数是关于向量和矩阵的理论。说到在高中就学过的向量,读者可能会想起在二维平面和三维空间等几何学上的应用,或者在力学、电磁学等物理学上的应用,但这些只是向量的一个方面。
利用向量和矩阵的计算统称为线性计算。多项式和三角函数等被认为是向量,微分和积分也是线性计算的一种。在物理学中,系统的状态是通过微分方程被公式化的,为了解决这个微分方程,会涉及线性代数中的特征值问题(第7章)。工程学中,在声音处理、图像处理、通信理论、控制理论等领域中都使用了称为傅里叶分析的方法,这与由向量之间的内积定义的正交性有密切的关系(第6章)。概率论和统计学中使用的计算主要是积分计算,通常与线性代数中的联立方程式和特征值问题联系在一起(第10章)。
如今,人工智能(AI)、大数据等术语随处可见,要了解这些领域,精通线性代数是非常必要的。在本书中,将从头开始构筑线性代数的理论,随时会涉及上述应用。
在大学的理工科相关专业中,微积分和线性代数是数学教学的两大支柱。关于微积分,可以很容易想象具体的例子,如微分可以想象成速度和加速度等;积分可以想象成面积和体积等。但是关于线性代数,矩阵的乘积、行列式、逆矩阵、特征值、特征向量等太抽象,不能在现实中找到对应的例子,读者也不知道这些内容有什么用。
而且,在学习线性代数时训练的计算能力对将来几乎没有帮助。不难想象,线性代数的应用领域经常需要在瞬间进行大规模的计算,这是人工计算无法完成的,这时计算机就可以发挥其强大功能。也许有的读者会想,只要掌握了人工计算的解题方法,就能编写出解决大规模计算问题的计算机程序。如今,已经有了各种各样的线性计算工具,大多数情况下,直接用这些工具就能解决问题,很多时候甚至不需要自己编写代码。
读者需要的能力在于“找出对解决问题有帮助的工具,并熟练地运用它”。为此,有必要了解线性代数应用的各种案例。此外,还必须了解这些工具能在每个案例中发挥作用的原理。
在本书的第9章、第10章就列举了几个这样的例子。而在第1~8章,构筑了基本完整的线性代数理论。笔者对每一个数学事实都尽可能地加上原创证明,几乎没有偷工减料。另外,在具体的数值计算中,使用了编程语言之一的Python来代替计算器进行说明。
为什么选择Python
在选择本书的读者中,有些可能是被书名中的“Python”所吸引。那么,为什么本书选择Python呢?答案是因为Python中有很多方便的工具来处理线性计算,如可以使用分数库fraction直接处理分数,如果包含文字常量和变量,可以用文字格式来表示计算结果,并根据需要通过解方程式的形式来处理,这在介绍本书前半部分的数学意义时非常有用。
另外,Python也有交互模式。使用这个交互模式,就像使用计算器一样,可以一边确认每一个计算步骤,一边进行公式变形。在计算过程中,还可以从视觉上观察二维向量和三维向量。而行列式、逆矩阵、特征值等线性代数特有的计算问题,也可以通过代码获得答案。事实上,大学里线性代数教科书上的很多练习题,都能用Python来获得答案。
如果有必要,还可以制作新的练习题,如果稍微下点功夫,也可以考虑用适合手工计算的问题来制作。实际上,本书的一位执笔者,多年来一直在用Python随机生成线性代数的问题,让所有学生解决不同数值的问题的形式来上课。不让计算的麻烦产生不公平这一点也在程序中考虑到了。
但是,只做这种例题(练习题)水平的计算,很难理解线性代数的真正意义。这时,就可以尝试处理声音、图像等规模(维度)较大的数据。对于这些数据文件,几乎不用考虑格式,就可以将其作为易于进行线性计算的向量化数据来读取。如果用线性代数中学过的方法对拍摄的图像和录制的声音进行加工,就会发现线性代数更有趣。
如果将本书中学到的知识运用到RaspberryPi等微型电脑上,制造人工智能机器人也不是梦想。在微型电脑上运行本书介绍的Python代码,除了少数例外,几乎都能以实际的速度运行,这是很令人惊讶的。
本书的结构与阅读方法
本书各章的关系如下图所示。
……