《计算机代数运算系统的数学原理》读后感/书评
该文章同步于知乎: 《计算机代数运算的数学原理》读后感/书评 – 知乎 (zhihu.com)
简要介绍下我读完这本书的观后感吧, 顺便做个总结. 闲的没事, 水一水文章, 语言组织稀烂, 凑活看.
如果你还不知道这本书, 请看这里:
《计算机代数运算系统的数学原理》pdf电子书资源上架! – limitless
(其实说实话这本书是我跳着看的, 一些地方实在是没法硬着头皮读了……太tm干燥无味了, 领会思想即可, 记忆是没用且不可能记住的, 所以跳过我认为是明智的. 不过有些地方确实很有意思, 对正常人也挺有启发性的, 比如运算π和e的那里, 还有符号微积分运算方法, 多项式化简与求值插值之类的, 很实用. 那些不实用的, 比如素数判定那里我感觉正常人用不太上)
这本计算机代数系统数学原理,作为 maTHµ 系统的理论文档,便是 maTHµ 项目组成员通过近一年半时间集体整理撰写的成果。计算机代数理论方面的中文文献稀缺。即使在英文文献中,能够足以支撑一个通用计算机代数系统的系统论述也少见,更多的内容散见在专著,博士论文及专业期刊中。
花大力气整理文档的初衷十分简单:理论不清,则后续的设计与开发阶段根本无法进行,更何况计算机代数理论本身复杂而相互交织。举例来说,求微分方程的符号解需要符号积分的支持,而有理函数符号积分需要借助精确线性代数,多项式因子分解,代数方程组求解等算法,其中 Z[x] 上的多项式因子分解依赖有限域上的因子分解,从而需要数论中模算法的支持,而数论算法又建立在任意精度的快速运算上。整个书稿的内容组织也大体符合构建计算机代数系统的逻辑顺序。
本书包含:高精度运算,数论,数学常数,精确线性代数,多项式,方程求解,符号极限,符号求和,符号积分,微分方程符号解等十个大部分,涵盖了构建计算机代数系统的最基础也是最重要的内容。许多内容是第一次被系统地整理出现在中文文献中,一些领域也追踪到了最新进展。
——2009年编者写的
首先, 这本书是我在研究Mathematica的原理的时候无意发现的, 立刻找到盗版资源下载了下来, 发现写的可以.
《计算机代数运算系统的数学原理》是清华大学的一帮学数学, 计算机, 自动化, 电子信息工程的兴趣爱好者, 共同为了实现一个自己写的Mathematica而努力的过程中总结知识点写的一本书. 这些人在2009年, 互联网还比较开放的时候, 共同为了一个理想: 实现一个Mathμ, 也就是自己编译的Mathematica而努力. 在学习的同时不忘了汇编整理相关资料并开源给大众阅读.
整本书其实内容挺简单的, 就是把所有东西的算法以及算法的来源推导全部罗列了一遍, 最后简要介绍Mathmu的建设结果. (当然现在这个项目的网址已经访问不了的了, 域名已经被一个酒店买了. 但是代码还在, 是Linux上编译的mathmu内核, 可能界面等东西需要重新搭建了, 但是主程序还在)
根据我的感觉, 《计算机代数运算系统的数学原理》就是将常见的一些算法的推导过程, 其中运用的思想做介绍, 然后给出算法的实现方式.
对于计算机代数运算系统, 该系统没有一个统一的基础, 纯粹的作为一个专家系统出现, 从质因数分解, 到多项式分解与规约, 到微积分运算以及线性代数, 每个部分有其自己的推导方式. 而计算机代数运算系统只是作为专家系统, 开发者将相关算法录入到该系统里, 然后在解决问题的时候, 根据需要调用相关的方法而已. 没有我最开始想的那么复杂.所有运算规律全部都是需要已经有前人发现并解决才行. 人类解决不了的问题, 计算机同样解决不了. 除非有一些算法非常复杂以至于在人类看来没有实际价值的时候才有使用计算机代数运算系统解决的必要. 除此之外, 该系统仅适合解决规模庞大的代数运算, 简化人类的工作.
其实有点遗憾, 因为这意味着人类解决不了的puzzle, 用Mathematica去编程也解决不了……..
简要归纳一下计算机代数运算系统的数学原理的话, 就是:
这是一个专家系统, 一个根据总结前人发现的数学规律, 并将他们转化为算法存储到硬盘内, 根据问题去调用相关规则库与数据库, 从而解决疑难杂症的一个系统.
举个例子, 比如在Mathematica内输入如下代码
N[Pi]
也就是求解\(\pi\)的近似小数解, 那么Mathematica内部可能调用
\[\begin{aligned}
\pi &=\frac{1}{2^6} \sum_{n=0}^{\infty} \frac{(-1)^n}{2^{10 n}}\left(-\frac{2^5}{4 n+1}-\frac{1}{4 n+3}+\frac{2^8}{10 n+1}-\frac{2^6}{10 n+3}-\frac{2^2}{10 n+5}-\frac{2^2}{10 n+7}+\frac{1}{10 n+9}\right)
\end{aligned}\]
去并行求解. (原书章节5.1.1)
如果输入
N[E]
也就是求解\(e\)的近似小数解, 那么Mathematica内部可能调用
\[\begin{align}
u_{n+2}&=u_{n+1}+\frac{1}{n} u_n \\
v_{n+2}&=\frac{1}{n} v_{n+1}+v_n \\
\lim _{n \rightarrow \infty} \frac{n}{u_n}&=e \\ \lim_{n \rightarrow \infty} \frac{2 n}{v_n^2}&=\pi
\end{align}\]
这个递推公式去求解. 其中\(u_0 = v_0 = 0, u_1 = v_1 = 1\).(原书章节5.2.1)
如果需要计算一个积分呢? 比如
Integrate[x^2+x-1,{x,0,3}]
也就是
\[\int_0^3 (x^2+x-1) dx\]
那么可能就会调用章节16.1处提到的相关算法去求解……
所以这样来看的话, Mathematica其实本质也不复杂, 就是实现起来的时候非常费劲…..
相关代码访问如下链接下载:
https://gitee.com/zhouxs1023/mU.git
如果不能下载的话, 我已经将相关资源上传到服务器, 访问如下链接从服务器下载资源.
注意!Lbook业务已经进行改版,请从Lbook入口进入并获取PDF资源,下面的资源现在无法访问!
请尽量从上面的链接下载.
像那些目的纯粹性的为了知识而奋斗的先辈们致敬!
有的人负责提出构想, 而我们将构想变为现实
国庆节过后应该就要进组打工了吧…. 争取摸鱼的时间开始我的下一个兴趣目标: Lisp语言, 争取不让我的λ演算基础浪费掉. 顺便再看一看编译原理, 估计以后闲时间会越来越少.
2022年10月6日
