Some expectations of the notes and this project-based module to you.
欢迎来到这篇关于帝国理工大三 MATH60024: Computational Linear Algebra 的学习笔记。这篇笔记中大致概括了课程网站中提及的重要的知识点,同时我在Professor Colin Cotter (即本门课的教师)的笔记基础上,对于容易引起异议以及疑问的地方增加了一些我自己的注释(例如对于一些概念增加图例进行具体解释,或是对于一些定理进行证明),希望对你有所帮助。
为了让你更好地了解这门课,或是为了说服你接下来选择这门课,不妨先看看我对于这门课的介绍:
1. 为什么学(选)这门课?
这确实是个好问题 - 或许很多人很快决定了自己要选某些课,但有些人也总会有些不确定。
那就让我们先从我个人的感受开始吧:我觉得这门课并不算难学(我也拿到了不低的分数)。相比于单纯理解晦涩的数学概念以及深究命题的证明,我更加欣赏这门课每周 理论讲解 + 实际操作 的教学安排。而且由于实际操作的 coding exercise 会算到最后的总成绩,完成这些 exercise 会给我深入理解它背后的数学提供更强大的动力,同时通过对于数学的理解写出更加简洁优雅的代码。
再进一步说,完成 coding exercises 中一个个函数/算法的实现不仅加深了我对于这门课的理解,也在无形中构建起一个我解决各种应用数学问题的工具箱,这种感觉在我做 coursework 解决各种模拟/实践问题的时候尤为能够体现。虽然教授每周讲的内容不能算很少,写代码的过程中也会碰到各种各样的问题 (这或许也就是我决定完成这份笔记的理由),但这种授课模式让我也觉得学习这门课并不是一件枯燥的事情。
同时,我感觉在学习这门课的时候并不“孤独”。在我大三的第一学期,几乎我身边的人都选择或者至少尝试选择了这门课 - 大家一起讨论,一起对于写不出来的题目自闭,一起吐槽为什么这门课的每个 coursework 只给三天期限。 同时,这门课的 problem class 总是有很多人去,Ed Stem的讨论频道也是有许多人积极问问题,教授在Ed Stem上回复问题的速度也总是很快。
虽然课程中也总会有像是 coursework 题目出错、教授在 coursework 期间罢工(后来 coursework 延期了)、GTA 在 coursework marking 中漏看一部分导致算错分的离谱情况发生,但总体来说整个课程的学习氛围还是挺不错的。
最后,从内容上来讲,我觉得这门课让我对于其他科目更有“触类旁通”的感觉了。课程中线性代数的部分主要强调了矩阵的各种性质以及应用,而矩阵在坐标变换、解多元线性方程组甚至用数值方法解微分方程中的重要性可见一斑。通过这门课对于矩阵的深入理解,我也能够更好地在接下来的学习中理解各个应用数学学科之间是怎么联系在一起的,并且更好地使用数学工具去解决各种实际问题。
例如,我们如何将统计中的线性回归问题抽象成一个 Matrix-Vector Equation 的模型,以及如何在优化问题中利用矩阵各种性质如 eigenvalue 以及 eigenvector 设计各种算法(如图像压缩、去除噪声),最后如何通过高效的实现方法让计算机进行执行。
总的来说,我希望我的个人感受能够为你是否要选这门课提供一些参考。如果你很确定自己要选择这门课,我也希望我对于这门课的总体描述能够让你对于这门课留下好的第一印象。
2. 这门课具体做些什么?
这门课主要讨论矩阵代数(Matrix Algebra)的基本概念及应用,以及和矩阵相关算法的实现(Implementations of Matrix-Related Algorithms),即通过线性代数的基础实现一系列数值方法解决各种问题。
这门课的部分理论内容会与大二的 Numerical Analysis(例如使用 QR Factorisation, LU Factorisation 解 Matrix-Vector Equation)和 Network Science(例如使用 Power Method 和 Rayleigh Quotient 来找一个矩阵的 eigenvalue)相重合 - 我相信如果你还记得这部分的内容,这会对于你选择这门课将是一个优势,你在学习这门课的学习中也有更多的机会温故知新。
如果你对于这些东西从未接触过,甚至感觉几乎毫无印象 (就像我在大二暑假结束后一样),同时对于使用 Python 编程并不是那么自信 - 完全没必要担心这些!这份笔记会带领你从基础对于你的知识体系进行构建,同时帮助你提高你的编程水平。
我们将使用 Python 以及
numpy
来对于这门课讨论的各种矩阵相关算法进行实现 (If you were feeling good about programming with Julia in year 2, sorry about that ;-)。这门课会通过每周的 coding exercise 让你对于一周中学到的知识进行回顾,并使用 Python 进行实现一系列算法。就像我在前一部分讲的那样,实现 coding exercises 中一个个函数/算法的实现不仅可以加深你对于这门课的理解,也在无形中为你打造一个解决各种应用数学问题的工具箱。这门课最终的目标之一也就是通过实现这些 coding exercises 中的函数,完成一个属于你自己的 Python Package.这门课主要讨论的知识点如下:
- 线性代数基础 - 向量、矩阵及其性质、Projector 以及构建 orthonormal basis
- 解多元线性方程组的方法以及实现 1 (重要)- QR Factorisation and Implementation
- 如何分析算法是否高效 - Measure Operation Counts in Algorithms
- 如何分析算法的稳定性 - 浮点数,Matrix Norm and Condition Numbers
- 解多元线性方程组的方法以及实现 2 (重要)- LU/PLU Factorisation and Implementation
- 寻找矩阵特征值以及特征向量的方法以及实现 (重要)- Iterative Methods (Power, Rayleigh, etc.)
- 解多元线性方程组的方法以及实现(进阶) - Krylov Space Methods
希望这一部分的内容能让你对于这门课的内容有一个初步的了解。
3. 课程的结构是怎样的?
首先,也是最重要的一点是:这门课是一门 100% Coursework 的课程。这意味着你如果完成了这门课,你就可以在 Summer Term 少一门考试,从而更好的平衡你的复习 workload.
但这并不意味着这门课就会很轻松 - 你一共需要完成三个 coursework, 并且每个 coursework 只有三天的时间完成。然而,同一个时间段可能有多门课发布 coursework 或者有 deadline,这就需要你在学期中合理分配你的时间以及精力来完成这门课的作业并且尝试取得高分。同时,根据数学系的规定,一旦你提交了第一个 coursework,你就等同于选择了这门课作为你今年的考试科目 (不可退选)。所以请各位在提交第一个coursework的时候也慎重考虑。
以下是这门课 coursework 安排的大致信息(以2021年为例):
作业 | 考察范围 | 开始/截止日期 | 权重占比 |
Coursework 1 | By the end of Chapter 2 + coding exercises 1-3 | Nov 2, 2021 → Nov 4, 2021 | 30% |
Coursework 2 | By the end of Chapter 4 + coding exercises 4-7 | Nov 30, 2021 → Dec 2, 2021 | 30% |
Coursework 3 | By the end of Chapter 6 + coding exercises 8-10 | Jan 11, 2022 → Jan 13, 2022 | 40% |
接下来让我们谈谈这门课的教学模式(我个人来讲有喜欢和不喜欢的点):
- 这门课采取了一个 “reversed-classroom” 的教学模式,即教授将一周的理论知识点以录播的形式给到所有学生,到了线下problem class的时候不重复讲解录播视频里的内容,只对于特定的问题(理论+编程实践)进行讨论以及答疑,同时学生可以用problem class完成本周的coding exercise并进行讨论。
- 我个人觉得这种授课方式是高效的,但是这需要建立在学生拥有足够的自主性,在problem class之前看完所有课并且对于内容有一定理解的基础上。
- 从另一方面说,这个授课方式也具有很大的局限性。录播视频相比与线下讲解势必会产生更多老师没有讲清楚,学生也没有听明白的点。同时,如果理论方面没有理解,在编程的时候势必会产生更多的问题。考虑到老师在上课的时候可能也不会着重强调一些编程相关的知识,这有可能会加速学生对于知识掌握的两极分化,即懂理论和编程的学生能够朝着一个好的方向进步,但那些由于理论或编程感到疑惑而且无法快速得到解决的学生不免会对于这门学科产生畏难情绪,从而错失了获得高分的机会。
希望我对于课程结构的解读能够为你是否选择这门课提供一些建议。当然,如果你选择了这门课,并遇到的类似的困境,我希望这份笔记 (或是我本人)会是你坚强的后盾,通过细致的讲解以及具象的例子帮你度过难关。
如果我的介绍能够让你开始对于这门课感兴趣,或是你已经决定要选择这门课,或许直接进入我们的第一章(草稿)是个不错的选择。希望这份笔记能对于你在这门课的学习过程中起到帮助。