具体描述
本书沿袭“程序员的数学”系列平易近人的风格,用通俗的语言和具象的图表深入讲解了编程中所需的线性代数知识。内容包括向量、矩阵、行列式、秩、逆矩阵、线性方程、LU分解、特征值、对角化、Jordan标准型、特征值算法等。
作者简介
堀玄
专攻应用数学和物理,主要从事脑科学与信号处理领域的研究。喜欢Ruby、JavaScript、PostScript等语言。最近正在研究基于统计学理论的语言处理。工学博士。
平冈和幸
专攻应用数学和物理,对机器学习兴趣浓厚。喜欢Ruby,热爱Scheme。最近被Common Lisp吸引,正在潜心研究。工学博士。
目录信息
0.1 空间想象给我们带来的直观感受 1
0.2 有效利用线性近似的手段 2
第1章 用空间的语言表达向量、矩阵和行列式 5
1.1 向量与空间 5
1.1.1 最直接的定义:把数值罗列起来就是向量 6
1.1.2 “空间”的形象 9
1.1.3 基底 11
1.1.4 构成基底的条件 16
1.1.5 维数 18
1.1.6 坐标 19
1.2 矩阵和映射 19
1.2.1 暂时的定义 19
1.2.2 用矩阵来表达各种关系(1) 24
1.2.3 矩阵就是映射! 25
1.2.4 矩阵的乘积=映射的合成 28
1.2.5 矩阵运算的性质 31
1.2.6 矩阵的乘方=映射的迭代 35
1.2.7 零矩阵、单位矩阵、对角矩阵 37
1.2.8 逆矩阵=逆映射 44
1.2.9 分块矩阵 47
1.2.10 用矩阵表示各种关系(2) 53
1.2.11 坐标变换与矩阵 55
1.2.12 转置矩阵=??? 63
1.2.13 补充(1):时刻注意矩阵规模 64
1.2.14 补充(2):从矩阵的元素的角度看 67
1.3 行列式与扩大率 68
1.3.1 行列式=体积扩大率 68
1.3.2 行列式的性质 73
1.3.3 行列式的计算方法(1):计算公式▽ 80
1.3.4 行列式的计算方法(2):笔算法▽ 87
1.3.5 补充:行列式按行(列)展开与逆矩阵▽ 91
第2章 秩、逆矩阵、线性方程组——溯因推理 95
2.1 问题设定:逆问题 95
2.2 良性问题(可逆矩阵) 97
2.2.1 可逆性与逆矩阵 97
2.2.2 线性方程组的解法(系数矩阵可逆的情况)▽ 97
2.2.3 逆矩阵的计算方法▽ 107
2.2.4 初等变换▽ 110
2.3 恶性问题 115
2.3.1 恶性问题示例 115
2.3.2 问题的恶劣程度——核与像 120
2.3.3 维数定理 122
2.3.4 用式子表示“压缩扁平化”变换(线性无关、线性相关) 126
2.3.5 线索的实际个数(秩) 130
2.3.6 秩的求解方法(1)——悉心观察 137
2.3.7 秩的求解方法(2)——笔算 142
2.4 良性恶性的判定(逆矩阵存在的条件) 149
2.4.1 重点是“是不是压缩扁平化映射” 149
2.4.2 与可逆性等价的条件 150
2.4.3 关于可逆性的小结 151
2.5 针对恶性问题的对策 152
2.5.1 求出所有能求的结果(1)理论篇 152
2.5.2 求出所有能求的结果(2)实践篇 155
2.5.3 最小二乘法 166
2.6 现实中的恶性问题(接近奇异的矩阵) 167
2.6.1 问题源于哪里 167
2.6.2 对策示例——提克洛夫规范化 170
第3章 计算机上的计算(1)——LU 分解 173
3.1 引言 173
3.1.1 切莫小看数值计算 173
3.1.2 关于本书中的程序 174
3.2 热身:加减乘运算 174
3.3 LU分解 176
3.3.1 定义 176
3.3.2 分解能带来什么好处 178
3.3.3 LU分解真的可以做到吗 178
3.3.4 LU分解的运算量如何 180
3.4 LU分解的步骤(1)一般情况 182
3.5 利用LU分解求行列式值 186
3.6 利用LU分解求解线性方程组 187
3.7 利用LU分解求逆矩阵 191
3.8 LU分解的步骤(2)意外发生的情况 192
3.8.1 需要整理顺序的情况 192
3.8.2 重新整理顺序也无济于事的状况 196
第4章 特征值、对角化、Jordan标准型——判断是否有失控的危险 197
4.1 问题的提出:稳定性 197
4.2 一维的情况 202
4.3 对角矩阵的情况 203
4.4 可对角化的情况 205
4.4.1 变量替换 205
4.4.2 变量替换的求法 213
4.4.3 从坐标变换的角度来解释 215
4.4.4 从乘方的角度来解释 219
4.4.5 结论:关键取决于特征值的绝对值 220
4.5 特征值、特征向量 220
4.5.1 几何学意义 220
4.5.2 特征值、特征向量的性质 225
4.5.3 特征值的计算:特征方程 232
4.5.4 特征向量的计算▽ 240
4.6 连续时间系统 246
4.6.1 微分方程 247
4.6.2 一阶情况 250
4.6.3 对角矩阵的情况 250
4.6.4 可对角化的情况 252
4.6.5 结论:特征值(的实部)的符号是关键 252
4.7 不可对角化的情况 255
4.7.1 首先给出结论 255
4.7.2 就算不能对角化——Jordan标准型 256
4.7.3 Jordan标准型的性质 257
4.7.4 利用Jordan标准型解决初始值问题(失控判定的最终结论) 264
4.7.5 化Jordan标准型的方法 271
4.7.6 任何方阵均可化为Jordan标准型的证明 279
第5章 计算机上的计算(2)——特征值算法 299
5.1 概要 299
5.1.1 和笔算的不同之处 299
5.1.2 伽罗华理论 300
5.1.3 5×5以上的矩阵的特征值不存在通用的求解步骤! 302
5.1.4 有代表性的特征值数值算法 303
5.2 Jacobi方法 303
5.2.1 平面旋转 304
5.2.2 通过平面旋转进行相似变换 306
5.2.3 计算过程的优化 309
5.3 幂法原理 310
5.3.1 求绝对值最大的特征值 310
5.3.2 求绝对值最小的特征值 311
5.3.3 QR分解 312
5.3.4 求所有特征值 316
5.4 QR方法 318
5.4.1 QR方法的原理 319
5.4.2 Hessenberg矩阵 321
5.4.3 Householder方法 322
5.4.4 Hessenberg矩阵的QR迭代 325
5.4.5 原点位移、降阶 327
5.4.6 对称矩阵的情况 327
5.5 反幂法 328
附录A 希腊字母表 330
附录B 复数 331
附录C 关于基底的补充说明 336
附录D 微分方程的解法 341
D.1 dx/dt = f(x) 型 341
D.2 dx/dt = ax + g(t) 型 342
附录E 内积、对称矩阵、正交矩阵 346
E.1 内积空间 346
E.1.1 模长 346
E.1.2 正交 347
E.1.3 内积 347
E.1.4 标准正交基 349
E.1.5 转置矩阵 351
E.1.6 复内积空间 351
E.2 对称矩阵与正交矩阵——实矩阵的情况 352
E.3 埃尔米特矩阵与酉矩阵——复矩阵的情况 353
附录F 动画演示程序的使用方法 354
F.1 执行结果 354
F.2 准备工作 354
F.3 使用方法 355
参考文献 357
· · · · · · (收起)
读后感
大一学了线性代数,教科书一开始从行列式开始讲起,到矩阵,特征值到二次型…学完了却一头雾水,因为教科书光教给你怎么计算,却不告诉你这么算的意义。所以,对线性代数一直都没好感。不知道发明这门学科的意义在哪。 直到看了这本书,才有种恍然大悟的感觉。本书让我明白了矩...
忘了的、没学过的都可以看看。 深入浅出,只是可以没有什么人来交流......
大一学了线性代数,教科书一开始从行列式开始讲起,到矩阵,特征值到二次型…学完了却一头雾水,因为教科书光教给你怎么计算,却不告诉你这么算的意义。所以,对线性代数一直都没好感。不知道发明这门学科的意义在哪。 直到看了这本书,才有种恍然大悟的感觉。本书让我明白了矩...
大一学了线性代数,教科书一开始从行列式开始讲起,到矩阵,特征值到二次型…学完了却一头雾水,因为教科书光教给你怎么计算,却不告诉你这么算的意义。所以,对线性代数一直都没好感。不知道发明这门学科的意义在哪。 直到看了这本书,才有种恍然大悟的感觉。本书让我明白了矩...
忘了的、没学过的都可以看看。 深入浅出,只是可以没有什么人来交流......
用户评价
我必须说,《程序员的数学3》是我近期读过的最令人兴奋的技术书籍之一。它不仅仅是一本“教你数学”的书,更像是一本“点亮你编程思维”的指南。在我看来,很多程序员常常陷入“知其然,不知其所以然”的困境,我们熟练掌握各种编程语言和框架,但对于支撑这些技术背后的核心数学原理却知之甚少。这本书恰恰解决了这个问题。它以一种非常独特且有启发性的方式,将离散数学、线性代数、概率论等在计算机科学中扮演重要角色的数学领域,进行了系统性的梳理和讲解。我印象最深刻的是关于图论的部分,书中不仅讲解了图的基本概念,还深入探讨了各种图算法,比如最短路径、最小生成树等,并详细分析了它们在网络、数据结构设计等方面的实际应用。这让我明白了为什么某些数据结构的设计效率如此之高,也为我解决实际问题提供了更强大的工具。这本书的结构设计也非常合理,每一章都围绕一个核心的数学主题展开,并在最后给出相应的编程实现和应用案例。这种“理论+实践”的模式,极大地增强了我的学习效率和动手能力。我不仅学到了数学知识,更学会了如何将这些数学知识转化为解决实际编程问题的能力。
这本《程序员的数学3》真是让我大开眼界!我一直觉得自己在编程领域还算有点基础,但每次遇到一些涉及到更深层次理论的问题时,总感觉力不从心。《程序员的数学3》的出现,恰好填补了我的知识空白。书的内容安排得非常巧妙,从最基础的概念讲起,循序渐进地深入到那些我之前只在文献里见过但从未真正理解过的数学分支。我尤其喜欢它将抽象的数学概念与实际的编程应用紧密结合的方式。书中举例的算法,比如那些在机器学习、数据科学领域至关重要的优化算法,在书里都有清晰的数学推导和直观的解释。读完之后,我感觉自己不仅理解了这些算法“怎么做”,更理解了“为什么这么做”。这让我对很多原本觉得“黑箱”的库和框架有了更深刻的认识,仿佛打开了新世界的大门。而且,书中的语言风格非常友好,不会像很多数学书籍那样让人望而生畏,即使是对于数学基础不是特别扎实的读者,也能轻松理解。作者在讲解过程中,总是能用一些生动的比喻和类比,将复杂的概念变得通俗易懂。这对于我这样白天忙于工作,晚上才能挤出时间学习的程序员来说,简直是福音。我发现自己开始主动去研究那些我以前只会调用的API背后的原理,这种求知欲的提升,正是这本书最大的价值所在。
说实话,我当初购买《程序员的数学3》时,并没有抱太高的期望,只是觉得作为一名程序员,了解一些数学基础总归是好的。但读完之后,我发现这本书的价值远远超出了我的预期。它就像一位经验丰富的导师,耐心地引导我一步步走进那些曾经令我感到神秘和畏惧的数学领域。我尤其喜欢书中对于离散数学在图算法、组合学等方面的应用讲解,这对我理解数据结构和算法的设计思维非常有帮助。我之前在工作中遇到的很多关于路径搜索、资源分配的问题,现在都能从数学的角度找到更优雅、更高效的解决方案。书中的数学推导虽然严谨,但讲解的方式却非常通俗易懂,配合大量的图示和生动的例子,让复杂的概念变得清晰明了。我甚至开始主动去研究一些经典的数学证明,而不是仅仅满足于知道结论。这让我对编程的理解不再局限于“如何实现”,而是开始思考“为什么这样实现”以及“是否有更好的实现方式”。这本书真的点燃了我对数学和编程的兴趣,让我看到了一个更广阔、更深邃的技术世界。
坦白讲,我一开始抱着试试看的心态拿起《程序员的数学3》,因为我一直觉得数学对编程来说,要么是过于理论化,要么就是一些基础的加减乘除。然而,这本书完全颠覆了我的认知。它让我看到了数学在现代软件开发中无处不在、且至关重要的作用。书中对概率统计的讲解,尤其是在理解机器学习模型(如贝叶斯分类器、隐马尔可夫模型)方面,简直是神来之笔。我之前对这些模型只是停留在“会用”的层面,对于它们内部的运作机制感到非常模糊,甚至有些畏惧。但通过这本书的讲解,我才真正理解了其中的概率分布、期望、方差等概念是如何支撑起这些复杂模型的。更让我惊喜的是,作者并没有仅仅停留在理论层面,而是给出了非常详尽的伪代码和一些简化的Python示例,让我能够亲手实践,验证理论的正确性。这对于我这种喜欢边学边练的读者来说,简直太友好了。书中的排版设计也非常清晰,图示丰富,能够帮助我更好地理解一些空间几何和向量运算的概念。读完这本书,我感觉自己在面对一些更高级的算法和数据结构时,信心倍增,不再是那个只知道死记硬背代码的“码农”了,而是能理解其背后逻辑的“工程师”。
《程序员的数学3》给我最大的震撼,在于它打破了我之前对数学和编程之间“隔阂”的固有印象。我一直认为,作为一个合格的程序员,只要掌握了足够的编程语言和框架,就可以解决大部分问题,数学能力反而不是那么关键。但这本书,像一记重拳,让我认识到自己的局限性。书中对于数值分析和优化理论的阐述,让我对那些日常工作中经常使用的算法,比如各种搜索算法、排序算法的性能优化,有了全新的理解。它深入浅出地解释了为什么某些算法在特定情况下表现优异,而另一些则可能陷入效率瓶颈。我尤其欣赏书中对微积分在算法分析中的应用讲解,这让我对时间复杂度和空间复杂度有了更深刻的直观认识,不再是单纯的O(n)、O(log n)的符号理解。而且,作者在讲解过程中,非常注重数学的“可计算性”和“工程可行性”,确保所讲解的数学工具能够真正落地到实际的编程场景中,这一点非常难得。书中的案例选择也很有代表性,涵盖了图像处理、信号分析等多个领域,让我看到了数学的广泛应用前景。我现在觉得,掌握了这些数学工具,编程不再是单纯的“搭建”,而是一种更具艺术性和科学性的“创造”。
- 向量就是空间(多维) - 矩阵就是映射(鸡兔同笼问题) - 千万不要小看数值计算
写得很细。我通过这本书复习了矩阵初等变换,求行列式,求特征值和特征向量的方法,另外也学习了矩阵的LU分解。矩阵的QR分解大概看了一下原理,等以后实在要用的时候再细看。
- 向量就是空间(多维) - 矩阵就是映射(鸡兔同笼问题) - 千万不要小看数值计算
了解了矩阵的概念。大学没好好学啊。突然对图片的显示有了点理解。
线代数学概念的本质讲得不错