作为一个科研工作者，数学在平时你的研究中有什么作用？
今天陪着导师跟几个大一新生聊天，其中就有一个人问道：我们学的数学有什么用？以后会用到吗？刚好手上在做一个数据科学导论的应用的课件，就顺便先给他讲了一下。 比如谷歌搜索最初采用的page rank算法，基本想法是这样的：每个网页的重要度均匀分配给它指向的链接，若干轮迭代，达到稳定之后的重要度作为网页的衡量指标。 具体的公式非常简单：  这样的公式，写一个两重for循环就可以解决。 可是如果你能够把它写成线性代数的矩阵的形式： 这时，矩阵形式的PageRank算法就是用这个M矩阵不断地做矩阵&向量乘法，直到结果收敛。 如果能够使用矩阵形式的PageRank，那么： 由此得到的加速：可以把 kn^3 的运算降低到 n^3 。 数学是有用的。 这就是为什么你学线性代数的时候很大一部分时间在学习各种对角化（相似对角化、合同对角化、两个矩阵同时被一个矩阵对角化）、上三角化、准对角化、Jordan标准型，都是为了要加速计算啊。
找 bug，据说还是道面试题。。。 嗯，这听起来和数学没半毛钱关系。但是，做数学都是玩高射炮打蚊子的游戏，当成一回事认真做的话，确实是需要一些知识。起因是我之前碰过一个深坑，和同事 007 排查，浪费了很多时间，但是找出原因以后，却觉得结论好二，某个参数设置错了。 由于不希望重蹈此类覆辙，故此希望在数学的层面，找到启迪自己组织和定位问题能力的精神力量，和战略意识，至于解是咋样的反倒其次。不过我实在想不出好的解来，我只是给出问题而已，希望通过问题来回答问题，我觉得也勉强满足主办者提问数学有啥用的要求吧。 问题抽象出来是这样的： 一个有点大的代码系统，分成了 N 个大逻辑模块，每个逻辑模块里面包含有 L 个业务函数，为了简单起见，不妨设每个逻辑模块的 L 都是一样的(数学上来说，不一样也没问题，鸡贼的做法就是填充无意义函数，直到相同为止)。反正运行一段时间，出现一个随机 bug，目前判断存不存在 bug 的方法很受限，就是拿一批知道结果的随机流量丢到这套系统里面，看看输出是否全部符合预期。 (这个世界上没有真正意义的随机，这里的随机 bug，指的是从业者，缺乏对系统底层运作机理的知识，导致感知层面的随机) 现实总是骨干的，会有如下可能性： 现在问题是，如何快速地组织团队，锁定这个 bug 的位置。 数学抽象以后，等效于 N 个 agent 如何协作 + 一个 master 如何协调 ，共同赢取一个游戏的问题。 命题如下：给定一个 [N, L] 的 Code 矩阵，N 表示模块个数，L 表示函数个数。每个 anget 都有一个 0-1 的  modify 矩阵 M=[N, L] ，该 modify 矩阵矩阵元 M[i, j] 表示第 i 个人的第 j 个函数是否被修改，而且每个 anget 的 modify 矩阵会随着调试过程发生变化。系统反馈就是 R，每次把这个 Code 矩阵，和 M 丢到系统里面 R(Code, M)，系统将返回结果是否改对了。 显然，最终目的就是找到这个 M 矩阵 开了微信群，相当于引入了环境状态 S，每个成员都会根据群里的讨论进度状态 S，按照自己固定的排查策略进行排查 M_{t+1}[i, :] = \pi_i (M_t[i, :]|S_t) \\ 这里，可以简单的把 S 当成是锁定代码区域的一个 mask 矩阵， S.shape = [N, L]。也就是说，屏蔽矩阵可以屏蔽掉人(他不用接着查了)，也可以屏蔽掉某个代码区域 (他不用 care 某个函数了)，如果 mask 屏蔽的地方越多，bug 被 agent 定位的效率越快。 当然，你不可能知道 \pi_i 是啥，你也无法干涉对方的排查习惯，但是你作为 master ，可以干涉微信讨论的状态，比如你根据讨论结果，高屋建瓴地建议对方只排查某个区域，数学上就是影响状态转移： S_{t+1} = K(S_t) \\ 请给出任意给定的 \pi_i 下，最快找到 bug 的最优 master 管理策略 K。这个策略 K 要求是多方面的。 这个问题我没想出解来，不过直觉上存在一个多个转变点： 我数学没想出啥好的解。。。