# 在新加坡的这五年—学术篇

### 基础书籍：

(1) Complex Analysis, 3rd Edition, Lars V. Ahlfors

(2) Complex Analysis, Elias M. Stein

(1) Lectures on Riemann Surfaces (GTM 81), Otto Forster

(2) Lectures on Quasiconformal Mappings, Lars V. Ahlfors

(1) Real Analysis and Complex Analysis, Rudin

(2) Real Analysis, Elias M. Stein

### 专业书籍：

(1) One Dimensional Dynamics, Welington de Melo & Sebastian VanStrien

(2) Mathematical Tools for One-Dimensional Dynamics (Cambridge Studies in

Advanced Mathematics), Edson de Faria / Welington de Melo

(3) Dynamics in One Complex Variable, John Milnor；Milnor 的教材总是写的清晰明确，容易上手，推荐初学者可以读这本书。

(4) Complex Dynamics, Lennart Carleson；Carleson 的教材偏向于分析学，读起来其实也有点难度，还是读 Milnor 的教材相对容易。

(5) Complex Dynamics and Renormalization, Curtis T. McMullen；McMullen 的书适合当做查阅，也不太适合从头到尾读下去。

(6) Renormalization and 3-Manifolds Which Fiber over the Circle, Curtis T. McMullen

(7) Iteration of rational functions (GTM 132), Alan F. Beardon

(8) An Introduction to Ergodic Theory (GTM 79), Walters Peter

### 论文

Question. 是否存在 $\ell\geq 4$ 的偶数和复数 $c\in\mathbb{C}$ 使得 $f(z)=z^{\ell}+c$ 的 Julia 集合 $J(f)$ 是正测度？

1. Combinatorics, geometry and attractors of quasi-quadratic maps，Pages 345-404 from Volume 140 (1994), Issue 2 by Mikhail Lyubich

2. Wild Cantor attractors exist，Pages 97-130 from Volume 143 (1996), Issue 1 by Hendrik Bruin, Gerhard Keller, Tomasz Nowicki, Sebastian van Strien

3. Quadratic Julia sets with positive area，Pages 673-746 from Volume 176 (2012), Issue 2 by Xavier Buff, Arnaud Chéritat

4. Polynomial maps with a Julia set of positive measure，Nowicki, Tomasz, and Sebastian van Strien，arXiv preprint math/9402215(1994).

### 参考资料：

1. 科研这条路
2. 维基百科：Julia 集合

# 一个数学家的辩白

《一个数学家的辩白》是数学大师 Godfrey Harold Hardy 在 1940 年左右的作品，可以称之为 Hardy 本人的自传和内心独白。Hardy 通过自己多年从事数学科研的经验，对数学，文学，哲学，美学等诸多学科的理解，将其写成了一本小册子。给其余的数学工作者，数学爱好者，以及不了解数学的人一个了解数学家内心的机会。

G.H.Hardy（1877 年 2 月 7 日 – 1947 年 12 月 1 日）是一代数论大师，英国数学家，先后在牛津大学（Oxford）和剑桥大学（Cambridge）担任数学教授，与另一位英国数学家 Littlewood 共同研究数学，其研究领域包括解析数论，三角级数，不等式等诸多方向。对数论领域和分析学领域的贡献巨大，是二十世纪英国分析学派的代表人物之一。

  在这平坦的沙滩上，
海洋与大地间，
我该建起或写些什么，
来阻止夜幕的降临?
告诉我神秘的字符，
去喝退那汹涌的波涛，
告诉我时间的城堡，
去规划那更久的白昼。

 倾江海之水，洗不净帝王身上的膏香御气。

1. 《一个数学家的辩白》；
2. 《黎曼猜想漫谈》。

# 一代数学大师 Rota 的经验与忠告

### Ten Lessons I wish I Had Been Taught

#### 讲座（Lecturing）

（a）每次讲座都应该只有一个重点。（Every lecture should make only one main point.）

Every lecture should state one main point and repeat it over and over, like a theme with variations. An audience is like a herd of cows, moving slowly in the direction they are being driven towards. If we make one point, we have a good chance that the audience will take the right direction; if we make several points, then the cows will scatter all over the field. The audience will lose interest and everyone will go back to the thoughts they interrupted in order to come to our lecture.

（b）不要超时。（Never run overtime.）

Running overtime is the one unforgivable error a lecturer can make. After fifty minutes (one micro-century as von Neumann used to say) everybody’s attention will turn elsewhere even if we are trying to prove the Riemann hypothesis. One minute overtime can destroy the best of lectures.

（c）提及听众的成果。（Relate to your audience.）

As you enter the lecture hall, try to spot someone in the audience with whose work you have some familiarity. Quickly rearrange your presentation so as to manage to mention some of that person’s work. In this way, you will guarantee that at least one person will follow with rapt attention, and you will make a friend to boot.

Everyone in the audience has come to listen to your lecture with the secret hope of hearing their work mentioned.

（d）给听众一些值得回忆的东西。（Give them something to take home.）

Most of the time they admit that they have forgotten the subject of the course and all the mathematics I thought I had taught them. However, they will gladly recall some joke, some anecdote, some quirk, some side remark, or some mistake I made.

#### 板书技巧（Blackboard Technique）

（a）开讲前保持黑板干净（Make sure the blackboard is spotless.）

By starting with a spotless blackboard you will subtly convey the impression that the lecture they are about to hear is equally spotless.

（b）从黑板的左上角开始书写（Start writing on the top left-hand corner.

What we write on the blackboard should correspond to what we want an attentive listener to take down in his notebook. It is preferable to write slowly and in a large handwriting, with no abbreviations.

When slides are used instead of the blackboard, the speaker should spend some time explaining each slide, preferably by adding sentences that are inessential, repetitive, or superfluous, so as to allow any member of the audience time to copy our slide. We all fall prey to the illusion that a listener will find the time to read the copy of the slides we hand them after the lecture. This is wishful thinking.

#### 多次公布同样的结果（Publish the Same Result Several Times）

The mathematical community is split into small groups, each one with its own customs, notation, and terminology. It may soon be indispensable to present the same result in several versions, each one accessible to a specific group; the price one might have to pay otherwise is to have our work rediscovered by someone who uses a different language and notation and who will rightly claim it as his own.

#### 说明性的工作反而更有可能被记得（You Are More Likely to Be Remembered by Your Expository Work）

When we think of Hilbert, we think of a few of his great theorems, like his basis theorem. But Hilbert’s name is more often remembered for his work in number theory, his Zahlbericht, his book Foundations of Geometry, and for his text on integral equations.

#### 每个数学家只有少数的招数（Every Mathematician Has Only a Few Tricks）

You admire Erdös’s contributions to mathematics as much as I do, and I felt annoyed when the older mathematician flatly and definitively stated that all of Erdös’s work could be “reduced” to a few tricks which Erdös repeatedly relied on in his proofs. What the number theorist did not realize is that other mathematicians, even the very best, also rely on a few tricks which they use over and over. But on reading the proofs of Hilbert’s striking and deep theorems in invariant theory, it was surprising to verify that Hilbert’s proofs relied on the same few tricks. Even Hilbert had only a few tricks!

#### 别害怕犯错（Do Not Worry about Your Mistakes）

There are two kinds of mistakes. There are fatal mistakes that destroy a theory, but there are also contingent ones, which are useful in testing the stability of a theory.

#### 使用费曼的方法（Use the Feynman Method）

You have to keep a dozen of your favorite problems constantly present in your mind, although by and large they will lay in a dormant state. Every time you hear or read a new trick or a new result, test it against each of your twelve problems to see whether it helps. Every once in a while there will be a hit, and people will say, “How did he do it? He must be a genius!”

#### 不要吝啬你的赞美（Give Lavish Acknowledgments）

I have always felt miffed after reading a paper in which I felt I was not being given proper credit, and it is safe to conjecture that the same happens to everyone else.

#### 写好摘要（Write Informative Introductions）

If we wish our paper to be read, we had better provide our prospective readers with strong motivation to do so. A lengthy introduction, summarizing the history of the subject, giving everybody his due, and perhaps enticingly outlining the content of the paper in a discursive manner, will go some of the way towards getting us a couple of readers.

#### 为老年做好心理准备（Be Prepared for Old Age）

You must realize that after reaching a certain age you are no longer viewed as a person. You become an institution, and you are treated the way institutions are treated. You are expected to behave like a piece of period furniture, an architectural landmark, or an incunabulum.

### Ten Lessons for the Survival of a Mathematics Department

#### 不要在其他系讲自己系同事的坏话（Never wash your dirty linen in public）

Departments of a university are like sovereign states: there is no such thing as charity towards one another.

#### 别越级打报告（Never go above the head of your department）

Your letter will be viewed as evidence of disunity in the rank and file of mathematicians. Human nature being what it is, such a dean or provost is likely to remember an unsolicited letter at budget time, and not very kindly at that.

#### 不要进行领域评价（Never Compare Fields）

You are not alone in believing that your own field is better and more promising than those of your colleagues. We all believe the same about our own fields. But our beliefs cancel each other out. Better keep your mouth shut rather than make yourself obnoxious. And remember, when talking to outsiders, have nothing but praise for your colleagues in all fields, even for those in combinatorics. All public shows of disunity are ultimately harmful to the well-being of mathematics.

#### 别看不起别人使用的数学（Remember that the grocery bill is a piece of mathematics too）

The grocery bill, a computer program, and class field theory are three instances of mathematics. Your opinion that some instances may be better than others is most effectively verbalized when you are asked to vote on a tenure decision. At other times, a careless statement of relative values is more likely to turn potential friends of mathematics into enemies of our field. Believe me, we are going to need all the friends we can get.

#### 善待擅长教学的老师（Do not look down on good teachers）

Mathematics is the greatest undertaking of mankind. All mathematicians know this. Yet many people do not share this view. Consequently, mathematics is not as self-supporting a profession in our society as the exercise of poetry was in medieval Ireland. Most of our income will have to come from teaching, and the more students we teach, the more of our friends we can appoint to our department. Those few colleagues who are successful at teaching undergraduate courses should earn our thanks as well as our respect. It is counterproductive to turn up our noses at those who bring home the dough.

#### 学会推销自己的数学成果（Write expository papers）

When I was in graduate school, one of my teachers told me, “When you write a research paper, you are afraid that your result might already be known; but when you write an expository paper, you discover that nothing is known.”

It is not enough for you (or anyone) to have a good product to sell; you must package it right and advertise it properly. Otherwise you will go out of business.

When an engineer knocks at your door with a mathematical question, you should not try to get rid of him or her as quickly as possible.

#### 不要把提问者拒之门外（Do not show your questioners to the door）

What the engineer wants is to be treated with respect and consideration, like the human being he is, and most of all to be listened to with rapt attention. If you do this, he will be likely to hit upon a clever new idea as he explains the problem to you, and you will get some of the credit.

Listening to engineers and other scientists is our duty. You may even learn some interesting new mathematics while doing so.

#### 联合阵线（View the mathematical community as a United Front）

Grade school teachers, high school teachers, administrators and lobbyists are as much mathematicians as you or Hilbert. It is not up to us to make invidious distinctions. They contribute to the well-being of mathematics as much as or more than you or other mathematicians. They are right in feeling left out by snobbish research mathematicians who do not know on which side their bread is buttered. It is our best interest, as well as the interest of justice, to treat all who deal with mathematics in whatever way as equals. By being united we will increase the probability of our survival.

#### 把科学从不可靠中拯救出来（Attack Flakiness）

Flakiness is nowadays creeping into the sciences like a virus through a computer, and it may be the present threat to our civilization. Mathematics can save the world from the invasion of the flakes by unmasking them and by contributing some hard thinking. You and I know that mathematics is not and will never be flaky, by definition.

This is the biggest chance we have had in a long while to make a lasting contribution to the well-being of Science. Let us not botch it as we did with the few other chances we have had in the past.

#### 善待所有人（Learn when to withdraw）

Let me confess to you something I have told very few others (after all, this message will not get around much): I have written some of the papers I like the most while hiding in a closet. When the going gets rough, we have recourse to a way of salvation that is not available to ordinary mortals: we have that Mighty Fortress that is our Mathematics. This is what makes us mathematicians into very special people. The danger is envy from the rest of the world.

When you meet someone who does not know how to differentiate and integrate, be kind, gentle, understanding. Remember, there are lots of people like that out there, and if we are not careful, they will do away with us, as has happened many times before in history to other Very Special People.

### 参考资料：

1. Rota, Gian-Carlo. “Ten lessons I wish I had been taught.” Indiscrete thoughts. Birkhäuser, Boston, MA, 1997. 195-203.
2. Rota, Gian-Carlo. “Ten Lessons for the Survival of a Mathematics Department.” Indiscrete Thoughts. Birkhäuser, Boston, MA, 1997. 204-208.

# 新加坡首次出现两起新冠病毒死亡病例！

1. 勤洗手，多用肥皂；
2. 每天测量两次体温；
3. 咳嗽或者打喷嚏的时候用纸巾遮住口鼻；
4. 及时处理垃圾和食物，保持桌面整洁；
5. 注意室内通风，保持厕所干净。

# FluxRank: 如何快速地进行机器故障定位

### 贝叶斯网络

1. 如果草已经湿润，求降雨的概率是多少？
2. 如果草已经湿润，求没有降雨且洒水器开启的概率是多少？

$P(R=T,W=T)=P(R=T,S=T,W=T)+P(R=T,S=F,W=T)$

$= P(W=T|R=T,S=T)P(S=T|R=T)P(R=T) + P(W=T|R=T,S=F)P(S=F|R=T)P(R=T)$

$= 0.99*0.01*0.2+0.8*0.99*0.2=0.16038$

$P(W=T)=P(W=T,S=T,R=T)+P(W=T,S=F,R=T)+P(W=T,S=T,R=F)+P(W=T,S=F,R=F)$

$=P(W=T|S=T,R=T)P(S=T|R=T)P(R=T) + P(W=T|S=F,R=T)P(S=F|R=T)P(R=T) + P(W=T|S=T,R=F)P(S=T|R=F)P(R=F)+P(W=T|S=F,R=F)P(S=F|R=F)P(R=F)$

$= 0.99*0.01*0.2+0.8*0.99*0.2+0.9*0.4*0.8+0.0*0.6*0.8=0.44838,$

### FluxRank

FluxRank 这一模块的触发需要服务指标（Service KPI）的异常，因此需要对服务指标（Service KPI）进行异常检测。这里的服务指标通常指的是业务指标，包括某块 APP 的在线人数，某个接口的成功率，某个视频网站的卡顿数等指标。当服务指标出现了异常的时候，就启动 FluxRank 模块进行异常机器定位。

1. 异常检测部分：通过设定阈值或者某个简单的规则来进行异常检测，包括服务的 KPI（Service KPI）和机器的 KPI（machine KPIs）；
2. 手工检查异常的时间段，并且查看在异常的时间段内发生了什么情况；
3. 运维人员根据自身的业务经验来对机器的故障程度做人工排序；
4. 运维人员根据自身的业务经验来对故障进行处理，并且人工给出处理方案。

1. 如何衡量海量 KPIs 的变化程度？在这里不仅有服务的 KPIs，还有机器的 KPIs。而机器的 KPIs 包括内存，硬盘，IO，CPU等诸多固定的指标，那么如何对这些海量的 KPI 曲线进行变化程度的衡量，为后续的指标排序做准备就成为了一个难点；
2. 如何对 KPIs 进行异常性或者重要性的聚类，让运维人员能够一眼看出每个聚簇的差异或者异常程度？
3. 如何对 KPIs 聚类的结果进行排序？

1. 基于 Kenel Density Estimation 用于衡量海量 KPIs 在某一个时间段的变化程度和异常程度；
2. 基于上一步生成的异常程度，对诸多机器所形成的特征使用距离公式或者相似度公式，然后使用 DBSCAN 聚类算法来对机器进行聚类；
3. 在排序部分，对上一步的机器聚类结果进行排序；

#### Change Quantification

1. absolute derivative 方法：个人理解就是对时间序列进行一阶差分操作，然后对一阶差分来做时间序列异常检测，例如 3-sigma 等方法，一旦有明显的变化，就说明当前的时间点出现了突增或者突降；与该方法比较类似的一种方法是：MAD（Median Absolute Deviation）。对于一条时间序列 $X=[x_{1},\cdots,x_{n}]$ 而言，MAD 定义为 $MAD = median_{1\leq i\leq n}(|x_{i}-median(X)|)$，而每个点的异常程度可以定义为：$s_{i}=(x_{i}-median(X))/MAD = (x_{i}-median(X))/median_{1\leq i\leq n}(|x_{i}-median(X)|).$$s_{i}$ 较大或者较小的时候，表示上涨或者下降的异常程度。通过设置相应的阈值，同样可以获得时间序列的异常开始时间。
2. CUSUM 算法也是用于时间序列异常检测的。对于一条时间序列 $X=[x_{1},x_{2},\cdots,x_{n}]$，可以预估它的目标值（target value）$\mu_{0}$，通常可以用均值来估计，也需要计算出这条时间序列的标准差 $\sigma$。通常设定 $\mu_{1}=\mu_{0}+\delta\sigma$$K=\delta\sigma/2=|\mu_{1}-\mu_{0}|/2$。而 Tabular CUSUM 指的是迭代公式 $C_{i}^{+}=\max[0,x_{i}-(\mu_{0}+K)+C_{i-1}^{+}]$$C_{i}^{-}=\max[0,(\mu_{0}-K)-x_{i}+C_{i-1}^{-}]$，初始值是 $C_{0}^{+}=C_{0}^{-}=0$。当累计偏差 $C_{i}^{+}$ 或者 $C_{i}^{-}$ 大于 $H=5\sigma$ 的时候，表示 $x_{i}$ 出现了异常，也就是 out of control。通过这个值，可以获得时间序列开始异常的时间。

#### Change Degree

$P_{o}(\{x_{j}\}|\{x_{i}\}) = \prod_{j=1}^{\ell}P(X\geq x_{j}|\{x_{i}\})$,

$P_{u}(\{x_{j}\}|\{x_{i}\}) = \prod_{j=1}^{\ell}P(X\leq x_{j}|\{x_{i}\})$,

$o=-\frac{1}{\ell}\sum_{j=1}^{\ell}\ln P(X\geq x_{j}|\{x_{i}\})$,

$u =-\frac{1}{\ell}\sum_{j=1}^{\ell}\ln P(X\leq x_{j}|\{x_{i}\})$.

Beta 分布的概率密度函数（probabilisty density function）是 $f(x;\alpha,\beta) = x^{\alpha-1}(1-x)^{\beta-1}/B(\alpha,\beta)$，其中 $B(\alpha,\beta)=\Gamma(\alpha)\Gamma(\beta)/\Gamma(\alpha+\beta)$。在机器 KPIs 中，CPU 等指标可以用 Beta 分布；

#### Digest Distillation

Pearson 系数指的是：$\rho_{X,Y}=\sum_{i=1}^{n}(x_{i}-\overline{x})\cdot(y_{i}-\overline{y})/\sqrt{\sum_{i=1}^{n}(x_{i}-\overline{x})^{2}\cdot\sum_{i=1}^{n}(y_{i}-\overline{y})^{2}},$ 其中 $\overline{x}=\sum_{i=1}^{n}x_{i}/n$$\overline{y}=\sum_{i=1}^{n}y_{i}/n$

Kendall tau 系数指的是：如果 ($x_{i}>x_{j}$$y_{i}>y_{j}$) 或者 ($x_{i}$y_{i})，那么称之为 concordant；如果 ($x_{i}$y_{i}>y_{j}$) 或者 ($x_{i}>x_{j}$$y_{i})，称之为 discordant；如果 $x_{i}=x_{j}$ 或者 $y_{i}=y_{j}$，则既不是 concordant，也不是 discordant。那么 Kendall tau 定义为 $[\text{(number of concordant pairs)}-\text{(number of disordant paris)}] / [n(n-1)/2]$

Spearman 系数指的是：通过原始序列变成秩次变量（rank）（从大到小降序排列即可），$x_{i}$ 将会对应到 $x_{i}'$，后者表示 $x_{i}$ 在从大到小排序之后的序列 $\{x_{i}\}_{1\leq i\leq n}$ 的位置，称之为秩次（rank），得到序列 $X'=[x_{1}',\cdots,x_{n}']$。对原始序列 $Y=[y_{1},\cdots,y_{n}]$ 作同样的操作，得到 $Y'=[y_{1}',\cdots,y_{n}']$。一个相同的值在一列数据中必须有相同的秩次，那么在计算中采用的秩次就是数值在按从大到小排列时所在位置的平均值。如果没有相同的 rank，那么使用公式 $r_{s} = 1-6\sum_{i=1}^{n}d_{i}^{2}/(n(n^{2}-1))$ 进行计算，其中 $d_{i}=x_{i}'-y_{i}'$；如果存在相同的秩次，则对 $X'=[x_{1}',\cdots,x_{n}']$$Y'=[y_{1}',\cdots,y_{n}']$ 来做 Pearson 系数即可，也就是 $\rho_{X',Y'}$

#### Digest Ranking

1. 变化开始时间（change start time）$T_{c}$ 会在失败发生时间 $T_{f}$ 之前；
2. 不同的故障机器 KPIs 的 change start time 是非常接近的；
3. 故障机器的一些 KPIs 的 change degree 是非常大的；
4. 故障机器的占比是与故障原因相关的，故障机器越多说明故障越大；

### 参考资料

1. FluxRank: A Widely-Deployable Framework to Automatically Localizing Root Cause Machines for Software Service Failure Mitigation，Ping Liu，Yu Chen，Xiaohui Nie，Jing Zhu，Shenglin Zhang，Kaixin Sui，Ming Zhang，Dan Pei，ISSRE 2019， Berlin, Germany, Oct 28-31, 2019。
2. Introduction to Statistical Quality Control，6th edition，Douglas C.Montgomery。
3. Bayesian Network：https://en.wikipedia.org/wiki/Bayesian_network

# 在新加坡的这五年—生活篇（五）

NUS 的 Shuttle Bus 是免费给所有人乘坐的，包括老师，学生，外来的工作人员等。除了免费这一个福利之外，NUS 的 Shuttle Bus 也别具特色，学校会将 LOGO 印在 Bus 上，可以让人一眼认出这个是 NUS 的 Bus。而 Bus 的大小是按照线路来分的，通常来说 A1，A2 的车型相对偏大，而 B1，B2，C 车的车型相对偏小，这也是根据是否经过宿舍区，和路线上人数的多少而定的。

NUS Utown 的游泳池虽然没有金沙酒店的游泳池那么高端，但是也是 NUS 的一大亮点之一。UTown 是 NUS 于 2011 年修建的大学城，承担了教学，住宿，学习，娱乐，健身于一身的诸多功能。在 UTown 建成之前，Prince George Park 其实只提供给本科生住宿，而 master 或者 PHD 想住学校宿舍的话，就只能够选择 BoonLay 的宿舍或者 Common Wealth 两处的宿舍。因为宿舍实在是不够用，必须要优先解决本科生的住宿问题。当 UTown 建成了之后，有不少的博士生都选择搬进去，而搬进去的时候，可以选择自己的室友。如果是熟悉的朋友自然是好，如果是没有熟悉的朋友就只能够跟其他陌生人一起居住了，不过就算是陌生人也是 NUS 的学生，因此整体来看也不会出现太大的问题。

UTown 的游泳池就位于 Stephen Ready Centre 的第三层，它对学生免费的。因此只要是 NUS 的教职工，就可以通过证件在开放时间内进入游泳池。一般到了午后或者周末，游泳池里面总是有很多学生在游泳或者晒太阳。相对于 Swimming Pool，这里更像是一个休闲的地方。无论是学生还是老师，觉得科研或者学习疲惫了，就可以来游泳池运动并且放松一下。

UTown 的 Graduate Residence 则是为学生们开设的宿舍区，每个屋子里面有四个小房间，每个房间里面可以住一位学生。四个学生将会共用一个客厅，卫生间，淋浴等公共场所。笔者当年住在 North Tower 的 22 层，通过窗外就可以看到 UTown 的景色。从 PGP 搬到 UTown 的时候应该是 2014-07-15 这个日子，随后笔者就在 UTown 一直住到了博士毕业。不过当时从 PGP 搬过来的时候，论文中的核心部分已经解决，剩下的就只是修修补补的工作，只需要把论文写完即可。于是在博士生第五年的时候，除了日常去 S17 的 Office 之外，其余大部分时间都是在 UTown 度过的。相较于在 PGP 的时光，由于没有了课题的巨大压力，在 UTown 的时光整体来看还是十分舒适和惬意的。（未完待续）

# NUS E-Open House

## NUS 的院系

### Department of Mathematics（数学系）

1. Finding Good Jobs；
2. Wide Range of Career Choices；
3. Multiple Pathways；
4. Myriads of Real World Applications；
5. Life Long Learning Skills。

# 为什么【在家办公比上班还累】？

《在家里工作的爸爸哦》

1. 工作与生活的时间界限感不强，导致工作的开始时间不明确；
2. 被家里的琐事频繁打断：例如洗衣服，照顾小孩，收快递，送东西等；
3. 自制力不强：容易被电视，电脑，游戏等好玩的东西所吸引。

1. 划清工作和生活的界限：找一个单独的房间，不被打扰，专心致志地工作。让自己从工作切换到生活的成本增加，而不是处于可以随意地切换工作与生活的状态。如果找不到相应的房间，就找一个桌子，日常生活不要坐到桌子前。但是一旦坐到了桌子前，就表示进入了工作状态。就表示不能够轻易地被打扰，要尽快开始一天的工作。

2. 使用日历表：根据自身情况，制定基于自己工作和生活状态的日历表，使用 Google Calendar 或者其他计时工具，把自己一天的日程安排下来，让自己在固定的时间内做固定的事情，不要被其他事情所打扰。

3. 制定详细的工作计划：包括制定每天需要输出的工作内容，无论是写了多少企划书，写了多少页 PPT，写了多少代码，完成了多少个功能点，都需要有非常明确的指标。只有制定了明确的目标，才能够督促自己完成任务。

4. 规划固定时间：吃饭，睡觉，娱乐等固定的时间先划分好，不到万不得已，不能随便改变生活规律，一旦改变生活规律，要想纠正回正常状态就会非常的困难。

5. 区分工作内容：提前区分哪些是需要团队协作的项目，哪些是靠自己就能够独立完成的项目。对于需要团队协作的项目，尽量提前安排好时间，毕竟跨地域沟通需要一定的成本，需要对方也在线，把时间和人提前安排好会明显优于临时安排。对于那些靠自己就能够独立完成的项目而言，只需要保证工作的时候不被打扰，专心致志地做完即可。

# 素数之美

### 哥德巴赫猜想（Goldbach’s Conjecture）

1. [Theorem] 每一个大于 7 的奇数都可以写成三个素数之和；
2. [Conjecture] 每一个大于 6 的偶数都可以写成两个素数之和。

[Theorem (Vinogradov)] 假设 $N$ 是一个奇数，令 $r(N) = \sum_{p_{1}+p_{2}+p_{3}=N}1$ 表示关于 $N$ 的计数函数，其中 $p_{1}, p_{2}, p_{3}$ 都是素数。则存在一个一致有界的函数 $\Omega(N) \in (c_{1},c_{2})$$c_{2}>c_{1}>0$）对于充分大的奇数 $N$，有以下式子成立

$r(N) = \Omega(N)\cdot \frac{N^{2}}{(\ln(N))^{3}}\cdot\bigg\{1+O\bigg(\frac{\ln\ln(N)}{\ln(N)}\bigg)\bigg\}.$

[Theorem (Chen)] 假设 $N$ 是一个偶数，令 $r(N)=\sum_{p+n=N}1$ 表示关于 $N$ 的计数函数，其中 $p$ 是素数，$n$ 表示最多为两个素数的乘积。则当 $n$ 充分大的时候，有以下式子成立：

$r(N) >> \Omega(N)\cdot \frac{2N}{(\ln(N))^{2}},$

1. 在哥德巴赫猜想的研究过程中，通常数学家把偶数可表示为 $a$ 个素数的乘积与 $b$ 个素数的乘积之和这个问题，简称为 $a + b$ 问题。所以，陈景润证明的 “1+2” 并不是指 1+2 = 3，而指的是对于每一个充分大的偶数，要么是两个素数之和，要么是一个素数加上两个素数之积。其实可以简单的理解为 $p_{1}+p_{2}$ 或者 $p_{1}+p_{2}\cdot p_{3}$，在这里 $p_{1},p_{2},p_{3}$ 都是素数。从以上公式可以看出，$\lim_{N\rightarrow \infty} r(N) = +\infty.$
2. 1920 年，挪威数学家 V.Brun 证明了 “9+9″，开启了数学家研究哥德巴赫猜想之路；1966 年，中国数学家陈景润证明了 “1+2″，把素数的筛法推向了顶峰。

### 孪生素数猜想（Twin Primes Conjecture）

1. 1940 年，Paul Erdos 证明 $\exists c>0$ 使得 $\liminf_{n\rightarrow\infty} \frac{p_{n+1}-p_{n}}{\ln(p_{n})}
2. 2005 年，Daniel Goldston，Janos Pintz 和 Cem Yildirim 证明 $\liminf_{n\rightarrow\infty}\frac{p_{n+1}-p_{n}}{\ln(p_{n})}=0.$
3. 2007 年，上述结果被改进为 $\liminf_{n\rightarrow\infty}\frac{p_{n+1}-p_{n}}{\sqrt{\ln(p_{n})}\cdot (\ln\ln(p_{n}))^{2}}=0.$
4. 2013 年，张益唐证明了 $\liminf_{n\rightarrow\infty}(p_{n+1}-p_{n}) < 7 * 10^{7}$，随后这个结果被改进到 246。

1. 1931 年，Erik Westzynthius 证明 $\limsup_{n\rightarrow\infty}\frac{p_{n+1}-p_{n}}{\ln(p_{n})} =\infty.$
2. 2014 年，Kevin Ford, Ben Green, Sergei Konyagin, Terence Tao 和 James Maynard 证明 $p_{n+1}-p_{n}>c\cdot \frac{\ln(n)\cdot \ln\ln(n) \cdot \ln\ln\ln\ln(n)}{\ln\ln\ln(n)}$ 对于某个 $c>0$ 和无穷个 $n$ 成立。

### 素数定理

[素数定理] 假设 $\pi(x)$ 表示不大于 $x$ 的所有素数的个数，那么 $\lim_{x\rightarrow \infty}\pi(x)/(x/\ln(x)) = 1.$

[孪生素数个数的上界] 假设 $\pi_{2}(x)$ 表示不大于 $x$ 的所有孪生素数个数，那么存在常数 $C>0$ 使得 $\pi_{2}(x)\leq C\cdot x/(\ln(x))^{2}.$

## 素数的性质

[Theorem (Euclid)] 素数有无穷多个。

$S(x) = \sum_{1\leq n\leq x} \frac{1}{n}.$

$\sum_{n=1}^{\infty}\frac{1}{n} = \prod_{p\text{ prime}}\bigg(1+\frac{1}{p}+\frac{1}{p^{2}}+\cdots\bigg)= \prod_{p\text{ prime}} \frac{1}{1-\frac{1}{p}},$

$\ln\bigg(\sum_{n=1}^{\infty}\frac{1}{n} \bigg)= \sum_{p\text{ prime}}\frac{1}{p} + O\bigg(\sum_{p\text{ prime}}\frac{1}{p^{2}}\bigg).$

1. $\sum_{p\text{ prime}, p\leq x} \frac{1}{p} = \ln\ln(x) + O(1);$
2. $\prod_{p\text{ prime}, p\leq x}\bigg(1-\frac{1}{p}\bigg)^{-1} = c\cdot\ln(x)+o(1),$ 这里，$c>0$ 是一个常数。

1. [Theorem] 所有正整数的倒数和是发散的；
2. [Theorem] 所有素数的倒数和是发散的。

[Theorem] 所有孪生素数的倒数和是收敛的。

$\pi_{2}(x) \leq C\cdot \frac{x}{(\ln(x))^{2}}$

$\frac{1}{p_{n}'} \leq C\frac{1}{n\cdot (\ln(n))^{2}}$

[Theorem] 对于充分大的 $x$ 而言，在 $[1,x]$ 内，素数之间的最小间隔 $\min_{p_{n}\leq x} (p_{n}-p_{n-1})\leq (1+o(1))\ln(x);$ 同时，素数之间的最大间隔 $\max_{p_{n}\leq x}(p_{n}-p_{n-1})\geq (1+o(1))\ln(x).$

### Eratosthenes 筛法（Eratosthenes Sieve Method)

Eratosthenes 筛法是数学家 Eratosthenes 提出的一种筛选素数的方法，其思路比较简单：想要筛选出 $[2,n]$ 中的所有素数，则首先把 $[2,n]$ 中的所有正整数按照从小到大的顺序 $2, \cdots, n$ 来排列，然后按照如下步骤执行：

1. 读取数列中当前最小的数 2，然后把 2 的倍数全部删除；
2. 读取数列中当前最小的数 3，然后把 3 的倍数全部删除；
3. 读取数列中当前最小的数 5，然后把 5 的倍数全部删除；（4 已经被第一步去掉了）
4. 读取数列中当前最小的数 7，然后把 7 的倍数全部删除；（6 已经被第一步去掉了）
5. 循环以上步骤直到 $[2,n]$ 中所有的数被读取或者被删除。

### Brun 筛法（Brun Sieve Method）

Question. 研究素数究竟有什么用？

Answer. 为了人类智慧的荣耀。

### 参考文献：

1.  Small and Large Gaps Between Primes, Terence Tao, Latinos in the Mathematical Sciences Conference, 2015.
2.  Bounded Gaps Beween Primes, Yitang Zhang, 2013.
3.  Additive Number Theory, Melvyn B.Nathanson, GTM 164.
4.  http://mathworld.wolfram.com/TwinPrimes.html.

# 在新加坡的这五年—生活篇（四）

“一入苹果深似海，从此钱财是路人”。苹果的产品确实做得很好，除了 iPhone 4 之外，后续笔者每年都会入手一些苹果的其他产品，包括 iPod Shuffle，itouch，键盘，鼠标，iPad，Mac Air。除了一体机 iMac 没有入手之外，其他的苹果产品均已体验过。当时基于这些产品，在 2013 年的时候把自己的电脑从 Lenovo 换成了 Mac Air，并且在博士生的办公室（Graduate Office 5）搭建了自己的工作环境（自然也可以无缝切换成游戏环境）。

# 在新加坡的这五年—生活篇（三）

Jan 31, 2014 00:18

# 拉格朗日四平方和定理

### 拉格朗日四平方和定理

Every positive integer is the sum of four squares.

• $1=1^{2}+0^{2}+0^{2}+0^{2}$
• $2 = 1^{2}+1^{2}+0^{2}+0^{2}$
• $7 = 2^{2}+1^{2}+1^{2}+1^{2}$

$(x_{1}^{2}+x_{2}^{2}+x_{3}^{2}+x_{4}^{2})\cdot(y_{1}^{2}+y_{2}^{2}+y_{3}^{2}+y_{4}^{2}) = z_{1}^{2}+z_{2}^{2}+z_{3}^{2}+z_{4}^{2}$，其中

$\begin{cases} z_{1}=x_{1}y_{1}+x_{2}y_{2}+x_{3}y_{3}+x_{4}y_{4} \\ z_{2}=x_{1}y_{2}-x_{2}y_{1}-x_{3}y_{4}+x_{4}y_{3} \\ z_{3}=x_{1}y_{3}-x_{3}y_{1}+x_{2}y_{4}-x_{4}y_{2} \\ z_{4}=x_{1}y_{4}-x_{4}y_{1}-x_{2}y_{3}+x_{3}y_{2}\end{cases}$

Claim. $m=1$

proof of the claim. 反证法，假设 $1 成立。令 $y_{i}=x_{i}(\mod m)$ 对于 $i\in\{1,2,3,4\}$ 成立，并且 $-m/2。因此，$y_{1}^{2}+y_{2}^{2}+y_{3}^{2}+y_{4}^{2}\equiv(x_{1}^{2}+x_{2}^{2}+x_{3}^{2}+x_{4}^{2})\equiv mp \equiv 0(\mod m)$。令 $mr = y_{1}^{2}+y_{2}^{2}+y_{3}^{2}+y_{4}^{2}$。因此，$mr\leq 4(m/2)^{2}=m^{2}$

### 参考文献

1. GTM 164, Additive Number Theory, Melvyn B.Nathanson, 1996.

# 传染病的数学模型

• 易感者（susceptible）：用符号 $S(t)$ 来表示；
• 感染者（infective）：用符号 $I(t)$ 来表示；
• 康复者（Recoverd）：用符号 $R(t)$ 来表示；

• $r$ 表示在单位时间内感染者接触到的易感者人数；
• 传染率：$\beta$ 表示感染者接触到易感者之后，易感者得病的概率；
• 康复率：$\gamma$ 表示感染者康复的概率，有可能变成易感者（可再感染），也有可能变成康复者（不再感染）。

Claim. 假设 $x=x(t)$ 是关于 $t$ 的一个方程，且满足 $\frac{dx}{dt} + a_{1}x + a_{2}x^{2}=0$$x(0)=x_{0}$，那么它的解是：$x(t) = \frac{e^{-a_{1}t}}{\frac{1}{x_{0}}-\frac{a_{2}}{a_{1}}(e^{-a_{1}t}-1)}$.

Proof. 证明如下：

### SI 模型（Susceptible-Infective Model）

$\begin{cases}\frac{dS}{dt} = -\frac{r\beta I}{N} S \\ \frac{dI}{dt}=\frac{r\beta I}{N}S \end{cases}$

$I(t) = \frac{NI_{0}}{I_{0}+(N-I_{0})e^{-r\beta t}}$.

### SIS 模型（Susceptible-Infectious-Susceptible Model）

$\begin{cases} \frac{dS}{dt} = -r \beta S\frac{I}{N} + \gamma I \\ \frac{dI}{dt}=r\beta S \frac{I}{N} - \gamma I \end{cases}$，其初始条件就是 $S(0)=S_{0}$$I(0)=I_{0}$.

$I(t) = \frac{N(r\beta-\gamma)}{r\beta}/\bigg(\bigg(\frac{N(r\beta-\gamma)}{I_{0}r\beta}-1\bigg)e^{-(r\beta-\gamma)t}+1\bigg)$.

### 参考文献

1. Introduction to SEIR Models, Nakul Chitnis, Workshop on Mathematical Models of Climate Variability, Environmental Change and Infectious Diseases, Trieste, Italy, 2017

# 符号计算中的深度学习方法

## 符号计算

• $2 + 3 * (5 + 2)$
• $3x^{2}+\cos(2x)+1$
• $\frac{\partial^{2}\psi}{\partial x^{2}} - \frac{1}{v^{2}}\frac{\partial^{2}\psi}{\partial t^{2}}$

>>> import sympy
>>> x, y = sympy.symbols("x y")
>>> expr = sympy.sin(x+y) + x**2 + 1/y - 10
>>> sympy.srepr(expr)
"Add(Pow(Symbol('x'), Integer(2)), sin(Add(Symbol('x'), Symbol('y'))), Integer(-10), Pow(Symbol('y'), Integer(-1)))"
>>> expr = sympy.sin(x*y)/2 - x**2 + 1/y
>>> sympy.srepr(expr)
"Add(Mul(Integer(-1), Pow(Symbol('x'), Integer(2))), Mul(Rational(1, 2), sin(Mul(Symbol('x'), Symbol('y')))), Pow(Symbol('y'), Integer(-1)))"

SymPy 的 srepr 函数的输出用树状结构来表示就是形如图 2 这种格式。叶子节点要么是 x，y 这种变量，要么是 -1 和 2 这种整数。对于一元函数而言，例如 sin 函数，就是对应唯一的一个叶子。对于二元函数而言，例如 pow，mul，add，则是对应两个叶子节点。

## 论文方案

1. 生成数据；
2. 训练模型；
3. 预测结果；

1. 函数的积分；
2. 一阶常微分方程；
3. 二阶常微分方程。

1. 数学表达式最多拥有 15 个内部节点；
2. $L = 11$ 表示叶子节点的值只有 11 个，分别是变量 $x$$\{-5,-4,-3,-2,-1,1,2,3,4,5\}$
3. $p_{1} = 15$ 表示一元计算只有 15 个，分别是 $\exp, \log, \sqrt, \sin, \cos, \tan, \arcsin, \arccos, \arctan$, $sinh, cosh, tanh, arcsinh, arccosh, arctanh$
4. $p_{2} = 4$ 表示二元计算只有四个，分别是 +, -, *, /；

### 一阶常微分方程的生成

1. 生成二元函数 $f(x,c) = x\log(c/x)$
2. 求解 $c$，得到 $c = xe^{f(x)/x}$
3. $x$ 进行求导得到 $0 = e^{f(x)/x}(1+f'(x)-f(x)/x) = 0$
4. 简化后得到 $x+xf'(x) - f(x) =0$，也就是 $x+xy'-y=0$

1. 生成三元函数 $f(x,c_{1},c_{2}) = c_{1}e^{x}+c_{2}e^{-x}$
2. 求解 $c_{2}$ 得到 $c_{2} = f(x,c_{1},c_{2}) e^{x}- c_{1}e^{2x}$
3. $x$ 进行求导得到 $0 = e^{x}(\partial f(x,c_{1},c_{2})/\partial x + f(x,c_{1},c_{2})) - 2c_{1}e^{2x} = 0$
4. 求解 $c_{1}$ 得到 $c_{1} = e^{-x}(\partial f(x,c_{1},c_{2})/\partial x+f(x))/2$
5. $x$ 进行求导得到 $0 = e^{-x}(\partial^{2} f(x,c_{1},c_{2})/\partial x^{2} - f(x,c_{1},c_{2}))=0$
6. 简化后得到 $\partial^{2} f(x,c_{1},c_{2})/\partial x^{2} - f(x,c_{1},c_{2})=0$，也就是 $y''-y=0$

### 数据处理

1. 数学表达式的简化（expression simplification）：例如 $x+1+1$ 可以简化成 $x+2$$\sin^{2}(x)+\cos^{2}(x)$ 可以简化成 1。
2. 参数的简化（coefficient simplification）：例如 $\log(x^{2}) + c\log(x)$ 可以简化成 $c\log(x)$
3. 无效表达式的过滤（invalid expression filter）：例如 $\sqrt{2}, \log(0)$ 等。

# SymPy 的简单介绍

SymPy 是一个符号计算的 Python 库，完全由 Python 写成，为许多数值分析，符号计算提供了重要的工具。SymPy 的第一个版本于 2007 年开源，并且经历了十几个版本的迭代，在 2019 年已经基于修正的 BSD 许可证开源了 1.4 版本。SymPy 的开源地址和官方网站分别是：

1. GitHub 链接：https://github.com/sympy/sympy
2. SymPy 官方网站：https://www.sympy.org/en/index.html

SymPy 的 1.4 版本文档中，可以看出，SymPy 可以支持很多初等数学，高等数学，甚至研究生数学的符号计算。在初等数学和高等数学中，SymPy 可以支持的内容包括但不限于：

1. 基础计算（Basic Operations）；
2. 公式简化（Simplification）；
3. 微积分（Calculus）；
4. 解方程（Solver）；
5. 矩阵（Matrices）；
6. 几何（geometry）；
7. 级数（Series）；

1. 范畴论（Category Theory）；
2. 微分几何（Differential Geometry）；
3. 常微分方程（ODE）；
4. 偏微分方程（PDE）；
5. 傅立叶变换（Fourier Transform）；
6. 集合论（Set Theory）；
7. 逻辑计算（Logic Theory）。

# SymPy 的工具库介绍

## SymPy 的基础计算

$e^{i\pi}+1 = 0$

sympy.exp(1), sympy.I, sympy.pi, sympy.oo

>>> sympy.exp(sympy.I * sympy.pi) + 1
0

>>> sympy.E.evalf(10)
2.718281828
>>> sympy.E.evalf()
2.71828182845905
>>> sympy.pi.evalf(10)
3.141592654
>>> sympy.pi.evalf()
3.14159265358979

>>> expr = sympy.sqrt(8)
>>> expr.evalf()
2.82842712474619

>>> x, y= sympy.symbols("x y")
>>> x + y
x + y
>>> x - y
x - y
>>> x * y
x*y
>>> x / y
x/y

>>> x1, y1, x2, y2 = sympy.symbols("x1 y1 x2 y2")
>>> z1 = x1 + y1 * sympy.I
x1 + I*y1
>>>  z2 = x2 + y2 * sympy.I
x2 + I*y2
>>> z1 + z2
x1 + x2 + I*y1 + I*y2
>>> z1 - z2
x1 - x2 + I*y1 - I*y2
>>> z1 * z2
(x1 + I*y1)*(x2 + I*y2)
>>> z1 / z2
(x1 + I*y1)/(x2 + I*y2)

>>> sympy.expand((x+1)**2)
x**2 + 2*x + 1
>>> sympy.expand((x+1)**5)
x**5 + 5*x**4 + 10*x**3 + 10*x**2 + 5*x + 1
>>> sympy.factor(x**3+1)
(x + 1)*(x**2 - x + 1)
>>> sympy.factor(x**2+3*x+2)
(x + 1)*(x + 2)
>>> sympy.simplify(x**2 + x + 1 - x)
x**2 + 1
>>> sympy.simplify(sympy.sin(x)**2 + sympy.cos(x)**2)
1


>>> expr = x*y + x - 3 + 2*x**2 - x**2 + x**3 + y**2 + x**2*y**2
>>> sympy.collect(expr,x)
x**3 + x**2*(y**2 + 1) + x*(y + 1) + y**2 - 3
>>> sympy.collect(expr,y)
x**3 + x**2 + x*y + x + y**2*(x**2 + 1) - 3
>>> expr.coeff(x, 2)
y**2 + 1
>>> expr.coeff(y, 1)
x

$expr = \frac{x^{2}+3x+2}{x^{2}+x}$

>>> expr = (x**2 + 3*x + 2)/(x**2 + x)
>>> sympy.cancel(expr)
(x + 2)/x
>>> sympy.together(expr)
(x**2 + 3*x + 2)/(x*(x + 1))

expr = (x**2 + 3*x + 2)/(x**2 + x)
>>> sympy.factor(expr)
(x + 2)/x
>>> expr = (x**3 + 3*x**2 + 2*x)/(x**5+x)
>>> sympy.factor(expr)
(x + 1)*(x + 2)/(x**4 + 1)
>>> expr = x**2 + (2*x+1)/(x**3+1)
>>> sympy.factor(expr)
(x**5 + x**2 + 2*x + 1)/((x + 1)*(x**2 - x + 1))

>>> expr = (x**4 + 3*x**2 + 2*x)/(x**2+x)
>>> sympy.apart(expr)
x**2 - x + 4 - 2/(x + 1)
>>> expr = (x**5 + 1)/(x**3+1)
>>> sympy.apart(expr)
x**2 - (x - 1)/(x**2 - x + 1)

>>> expr = sympy.sin(x)**2 + sympy.cos(x)**2
>>> sympy.trigsimp(expr)
1
>>> sympy.expand_trig(sympy.sin(x+y))
sin(x)*cos(y) + sin(y)*cos(x)
>>> sympy.expand_trig(sympy.cos(x+y))
-sin(x)*sin(y) + cos(x)*cos(y)
>>> sympy.trigsimp(sympy.sin(x)*sympy.cos(y) + sympy.sin(y)*sympy.cos(x))
sin(x + y)
>>> sympy.trigsimp(-sympy.sin(x)*sympy.sin(y) + sympy.cos(x)*sympy.cos(y))
cos(x + y)

>>> sympy.powsimp(x**z*y**z*x**z)
x**(2*z)*y**z
>>> sympy.simplify(x**z*y**z*x**z)
x**(2*z)*y**z
>>> sympy.expand_power_exp(x**(y + z))
x**y*x**z
>>> sympy.expand_power_base(x**(y + z))
x**(y + z)

$\ln(xy) = \ln(x) + \ln(y)$

$\ln(x/y) = \ln(x) - \ln(y)$

>>> sympy.expand_log(sympy.log(x*y), force=True)
log(x) + log(y)
>>> sympy.expand_log(sympy.log(x/y), force=True)
log(x) - log(y)

## SymPy 的微积分工具

>>> import sympy
>>> x = sympy.Symbol("x")
>>> f = 1 / x
1/x
>>> y = sympy.Symbol("y")
>>> f = f.subs(x,y)
1/y
>>> f = f.subs(y,1)
1

>>> f = 1/x
>>> sympy.limit(f,x,0)
oo
>>> sympy.limit(f,x,2)
1/2
>>> sympy.limit(f,x,sympy.oo)
0
>>> g = x * sympy.log(x)
>>> sympy.limit(g,x,0)
0

>>> f = 1/x
>>> sympy.diff(f,x)
-1/x**2
>>> sympy.diff(f,x,2)
2/x**3
>>> sympy.diff(f,x,3)
-6/x**4
>>> sympy.diff(f,x,4)
24/x**5

sympy.series.series.series(expr, x=None, x0=0, n=6, dir='+') >>> g = sympy.cos(x) >>> sympy.series(g, x) 1 - x**2/2 + x**4/24 + O(x**6) >>> sympy.series(g, x, x0=1, n=10) cos(1) - (x - 1)*sin(1) - (x - 1)**2*cos(1)/2 + (x - 1)**3*sin(1)/6 + (x - 1)**4*cos(1)/24 - (x - 1)**5*sin(1)/120 - (x - 1)**6*cos(1)/720 + (x - 1)**7*sin(1)/5040 + (x - 1)**8*cos(1)/40320 - (x - 1)**9*sin(1)/362880 + O((x - 1)**10, (x, 1))

$\int\frac{1}{x}dx = \ln(x)+C$

$\int_{1}^{2}\frac{1}{x}dx = \ln(2)$

>>> f = 1/x
>>> sympy.integrate(f,x)
log(x)
>>> sympy.integrate(f, (x,1,2))
log(2)

$\int_{-\infty}^{0}e^{-x^{2}}dx=\frac{\sqrt{\pi}}{2}$

$\int_{0}^{+\infty}e^{-x}dx = 1$

$\int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty}e^{-x^{2}-y^{2}}dxdy = \pi$

>>> g = sympy.exp(-x**2)
>>> sympy.integrate(g, (x,-sympy.oo,0))
sqrt(pi)/2
>>> g = sympy.exp(-x)
>>> sympy.integrate(g, (x, 0, sympy.oo))
1
>>> h = sympy.exp(-x**2 - y**2)
>>> sympy.integrate(h, (x,-sympy.oo, sympy.oo), (y, -sympy.oo, sympy.oo))
pi

## SymPy 的方程工具

$\{x\in\mathbb{R}: x^{3}-1=0\}$

$\{x\in\mathbb{C}:x^{3}-1=0\}$

$\{x\in\mathbb{R}:e^{x}-x=0\}$

$\{x\in\mathbb{R}:e^{x}-1=0\}$

$\{x\in\mathbb{C}:e^{x}-1=0\}$

>>> sympy.solveset(sympy.Eq(x**3,1), x, domain=sympy.S.Reals)
{1}
>>> sympy.solveset(sympy.Eq(x**3,1), x, domain=sympy.S.Complexes)
{1, -1/2 - sqrt(3)*I/2, -1/2 + sqrt(3)*I/2}
>>> sympy.solveset(sympy.Eq(x**3 - 1,0), x, domain=sympy.S.Reals)
{1}
>>> sympy.solveset(sympy.Eq(x**3 - 1,0), x, domain=sympy.S.Complexes)
{1, -1/2 - sqrt(3)*I/2, -1/2 + sqrt(3)*I/2}
>>> sympy.solveset(sympy.exp(x),x)
EmptySet()
>>> sympy.solveset(sympy.exp(x)-1,x,domain=sympy.S.Reals)
{0}
>>> sympy.solveset(sympy.exp(x)-1,x,domain=sympy.S.Complexes)
ImageSet(Lambda(_n, 2*_n*I*pi), Integers)

$\begin{cases}x+y-10=0 \\ x-y-2=0\end{cases}$

>>> sympy.solve([x+y-10, x-y-2], [x,y])
{x: 6, y: 4}

$\begin{cases} \sin(x-y)=0 \\ \cos(x+y)=0 \end{cases}$

>>> sympy.solve([sympy.sin(x-y), sympy.cos(x+y)], [x,y])
[(-pi/4, 3*pi/4), (pi/4, pi/4), (3*pi/4, 3*pi/4), (5*pi/4, pi/4)]

## SymPy 的矩阵工具

>>> sympy.eye(3)
Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
>>> sympy.eye(3,2)
Matrix([
[1, 0],
[0, 1],
[0, 0]])
>>> sympy.eye(2,3)
Matrix([
[1, 0, 0],
[0, 1, 0]])

>>> sympy.ones(2,3)
Matrix([
[1, 1, 1],
[1, 1, 1]])
>>> sympy.zeros(3,2)
Matrix([
[0, 0],
[0, 0],
[0, 0]])

>>> sympy.diag(1,1,2)
Matrix([
[1, 0, 0],
[0, 1, 0],
[0, 0, 2]])

$A = \left(\begin{array}{cc} 1 & 1 \\ 0 & 2 \end{array}\right)$

$B = \left(\begin{array}{cc} 1 & 0 \\ 1 & 1 \end{array}\right)$

>>> A = sympy.Matrix([[1,1],[0,2]])
>>> B = sympy.Matrix([[1,0],[1,1]])
>>> A
Matrix([
[1, 1],
[0, 2]])
>>> B
Matrix([
[1, 0],
[1, 1]])
>>> A + B
Matrix([
[2, 1],
[1, 3]])
>>> A - B
Matrix([
[ 0, 1],
[-1, 1]])
>>> A * B
Matrix([
[2, 1],
[2, 2]])
>>> A * B**-1
Matrix([
[ 0, 1],
[-2, 2]])
>>> B**-1
Matrix([
[ 1, 0],
[-1, 1]])
>>> A.T
Matrix([
[1, 0],
[1, 2]])
>>> A.det()
2

>>> A
Matrix([
[1, 1],
[0, 2]])
>>> A.row_insert(1, sympy.Matrix([[10,10]]))
Matrix([
[ 1, 1],
[10, 10],
[ 0, 2]])
>>> A.col_insert(0, sympy.Matrix([3,3]))
Matrix([
[3, 1, 1],
[3, 0, 2]])
>>> A.row_del(0)
>>> A
Matrix([[0, 2]])
>>> A.col_del(1)
>>> A
Matrix([[0]])

>>> A
Matrix([
[1, 1],
[0, 2]])
>>> A.eigenvals()
{2: 1, 1: 1}
>>> A.eigenvects()
[(1, 1, [Matrix([
[1],
[0]])]), (2, 1, [Matrix([
[1],
[1]])])]
>>> A.diagonalize()
(Matrix([
[1, 1],
[0, 1]]), Matrix([
[1, 0],
[0, 2]]))

>>> A = sympy.Matrix([[1,1],[0,2]])
>>> A
Matrix([
[1, 1],
[0, 2]])
>>> b = sympy.Matrix([3,5])
>>> b
Matrix([
[3],
[5]])
>>> A**-1*b
Matrix([
[1/2],
[5/2]])
>>> sympy.linsolve((A,b))
{(1/2, 5/2)}
>>> sympy.linsolve((A,b),[x,y])
{(1/2, 5/2)}

## SymPy 的集合论工具

I = sympy.Interval(0,1)
J = sympy.Interval.open(0,1)
K = sympy.Interval(0.5,2)

>>> I.start
0
>>> I.end
1

>>> I.measure
1

>>> I.closure
Interval(0, 1)

>>> I.interior
Interval.open(0, 1)

>>> I.left_open
False
>>> I.right_open
False

I = sympy.Interval(0,1)
K = sympy.Interval(0.5,2)
>>> I.intersect(K)
Interval(0.500000000000000, 1)
>>> I.union(K)
Interval(0, 2)
>>> I-K
Interval.Ropen(0, 0.500000000000000)
>>> K-I
Interval.Lopen(1, 2)
>>> I.symmetric_difference(K)
Union(Interval.Ropen(0, 0.500000000000000), Interval.Lopen(1, 2))

>>> sympy.S.Reals
Reals
>>> sympy.S.Reals-I
Union(Interval.open(-oo, 0), Interval.open(1, oo))
>>> I.complement(sympy.S.Reals)
Union(Interval.open(-oo, 0), Interval.open(1, oo))
>>> sympy.S.Reals.complement(I)
EmptySet()
>>> I.complement(K)
Interval.Lopen(1, 2)
>>> I.complement(sympy.S.Reals)
Union(Interval.open(-oo, 0), Interval.open(1, oo))

## SymPy 的逻辑工具

A, B, C = sympy.symbols("A B C")
>>> sympy.simplify_logic(A | (A & B))
A
>>> sympy.simplify_logic((A>>B) & (B>>A))
(A & B) | (~A & ~B)
>>> A>>B
Implies(A, B)

## SymPy 的级数工具

SymPy 的级数工具有一部分放在具体数学（Concrete Mathematics）章节了。有的时候，我们希望计算某个级数是发散的，还是收敛的，就可以使用 is_convergence 函数。考虑最常见的级数：

$\sum_{n=1}^{\infty}\frac{1}{n} = +\infty$

$\sum_{n=1}^{\infty}\frac{1}{n^{2}} = \frac{\pi^{2}}{6}$

>>> n = sympy.Symbol("n", integer=True)
>>> sympy.Sum(1/n, (n,1,sympy.oo)).is_convergent()
False
>>> sympy.Sum(1/n**2, (n,1,sympy.oo)).is_convergent()
True

>>> sympy.Sum(1/n**2, (n,1,sympy.oo)).evalf()
1.64493406684823
>>> sympy.Sum(1/n**2, (n,1,sympy.oo)).doit()
pi**2/6
>>> sympy.Sum(1/n**3, (n,1,sympy.oo)).evalf()
1.20205690315959
>>> sympy.Sum(1/n**3, (n,1,sympy.oo)).doit()
zeta(3)

$\prod_{n=1}^{+\infty}\frac{n}{n+1}$

$\prod_{n=1}^{+\infty}\cos\left(\frac{\pi}{n}\right)$

>>> sympy.Product(n/(n+1), (n,1,sympy.oo)).is_convergent()
False
>>> sympy.Product(sympy.cos(sympy.pi/n), (n, 1, sympy.oo)).is_convergent()
True

## SymPy 的 ODE 工具

$df/dx + f(x) = 0$,

$d^{2}f/dx^{2} + f(x) = 0$

$d^{3}f/dx^{3} + f(x) = 0$

>>> f = sympy.Function('f')
>>> sympy.dsolve(sympy.Derivative(f(x),x) + f(x), f(x))
Eq(f(x), C1*exp(-x))
>>> sympy.dsolve(sympy.Derivative(f(x),x,2) + f(x), f(x))
Eq(f(x), C1*sin(x) + C2*cos(x))
>>> sympy.dsolve(sympy.Derivative(f(x),x,3) + f(x), f(x))
Eq(f(x), C3*exp(-x) + (C1*sin(sqrt(3)*x/2) + C2*cos(sqrt(3)*x/2))*sqrt(exp(x)))

>>> sympy.classify_ode(sympy.Derivative(f(x),x) + f(x), f(x))
('separable', '1st_exact', '1st_linear', 'almost_linear', '1st_power_series', 'lie_group', 'nth_linear_constant_coeff_homogeneous', 'separable_Integral', '1st_exact_Integral', '1st_linear_Integral', 'almost_linear_Integral')
>>> sympy.classify_ode(sympy.Derivative(f(x),x,2) + f(x), f(x))
('nth_linear_constant_coeff_homogeneous', '2nd_power_series_ordinary')
>>> sympy.classify_ode(sympy.Derivative(f(x),x,3) + f(x), f(x))
('nth_linear_constant_coeff_homogeneous',)

## SymPy 的 PDE 工具

$\partial f/\partial x + \partial f/\partial y =0$

$\partial f/\partial x + \partial f/\partial y + f = 0$

$\partial f/\partial x + \partial f/\partial y + f + 10 = 0$

>>> f = sympy.Function("f")(x,y)
>>> sympy.pdsolve(sympy.Derivative(f,x)+sympy.Derivative(f,y),f)
Eq(f(x, y), F(x - y))
>>> sympy.pdsolve(f.diff(x)+f.diff(y)+f,f)
Eq(f(x, y), F(x - y)*exp(-x/2 - y/2))
>>> sympy.pdsolve(f.diff(x)+f.diff(y)+f+10,f)
Eq(f(x, y), F(x - y)*exp(-x/2 - y/2) - 10)

>>> sympy.classify_pde(f.diff(x)+f.diff(y)+f)
('1st_linear_constant_coeff_homogeneous',)
>>> sympy.classify_pde(f.diff(x)+f.diff(y)+f+10,f)
('1st_linear_constant_coeff', '1st_linear_constant_coeff_Integral')
>>> sympy.classify_pde(f.diff(x)+f.diff(y)+f+10,f)
('1st_linear_constant_coeff', '1st_linear_constant_coeff_Integral')

## SymPy 的数论工具

>>> sympy.sieve._reset()
>>> sympy.sieve.extend_to_no(100)
>>> sympy.sieve._list
array('l', [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631])

>>> [i for i in sympy.sieve.primerange(10,100)]
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

search() 函数是为了计算某个数附近是第几个素数：

>>> sympy.sieve.search(10)
(4, 5)
>>> sympy.sieve.search(11)
(5, 5)

>>> sympy.ntheory.generate.prime(10)
29
>>> sympy.ntheory.generate.nextprime(10)
11
>>> sympy.ntheory.generate.nextprime(11)
13
>>> sympy.ntheory.generate.isprime(11)
True
>>> sympy.ntheory.generate.isprime(12)
False

## SymPy 的范畴论工具

SymPy 还支持范畴论（Category Theory）的一些计算方法，在这里简要地列举一下。

>>> A = sympy.categories.Object("A")
>>> B = sympy.categories.Object("B")
>>> f = sympy.categories.NamedMorphism(A,B,"f")
>>> f.domain
Object("A")
>>> f.codomain
Object("B")

## 参考文献：

1. Meurer A, Smith C P, Paprocki M, et al. SymPy: symbolic computing in Python[J]. PeerJ Computer Science, 2017, 3: e103.
2. GitHub：https://github.com/sympy/sympy
3. SymPy：https://www.sympy.org/en/index.html
4. Sympy 维基百科：https://en.wikipedia.org/wiki/SymPy
5. GreatX’s Blog：数值 Python：符号计算：https://vlight.me/2018/04/01/Numerical-Python-Symbolic-Computing/
6. SymPy 符号计算-让Python帮我们推公式：https://zhuanlan.zhihu.com/p/83822118
7. Python 科学计算利器—SymPy库：https://www.jianshu.com/p/339c91ae9f41

# 新加坡国立大学的数据科学与机器学习项目介绍

1. 计算机科学与数学；
2. 经济学与数学；

NUS 的项目分成两块，coursework 项目和 Research 项目。第一个主要是以授课型的研究生为主，后者主要是为博士生或者准备攻读博士的人而准备的。对于硕士生而言，一般一两年就可以硕士毕业，只要修课的学分满了即可。

1. Introduction to Big Data for Industry;
2. Optimisation for Large-Scale Data-Driven Inference;
3. Foundations of Machine Learning/Theory and Algorithms for Machine Learning;
4. Cloud Computing;
5. DSML Industry Consulting and Applications Project.

# 读博的意义

1. 愚昧山峰：刚入学第一年的时候；

2. 低谷：第二年，第三年的时候；

3. 回升：第四年，第五年的时候。

2019年10月27日

# 深度学习在时间序列分类中的应用

$X=\{x_{1},\cdots,x_{n}\}$

$X = \{X^{1},\cdots,X^{M}\}$

$D=\{(X_{1},Y_{1}),(X_{2},Y_{2}),\cdots,(X_{N},Y_{N})\}$

## 深度学习算法在时间序列分类中的应用：Baseline

$\tilde{x} = f_{dropout, p}(x)$,

$y = W\cdot \tilde{x} + b$,

$h = ReLU(y)$.

$y = W \otimes x + b$,

$s = BN(y)$,

$h = ReLU(s)$,

Residual Network 是在 FCN 的基础上进行的改造。令 $Block_{k}$ 来表示第 $k$ 个卷积块，而 Residual 块就定义为：

$h_{1} = Block_{k_{1}}(x)$,

$h_{2} = Block_{k_{2}}(h_{1})$,

$h_{3} = Block_{k_{3}}(h_{2})$,

$y=h_{3} + x$,

$\hat{h}=ReLU(y)$.

### 评价指标

Mean Per Class Error (in Multi-class Classification only) is the average of the errors of each class in your multi-class data set. This metric speaks toward misclassification of the data across the classes. The lower this metric, the better.

## MSCNN

MSCNN 的全称是 Multi-Scale Convolutional Neural Networks，相应的论文是《Multi-Scale Convolutional Neural Networks for Time Series Classification》

1. 基于距离的方法（distance-based methods）：kNN，SVM（相似核），DTW；
2. 基于特征的方法（feature-based methods）：SVM，逻辑回归等；
3. 基于神经网络的方法（neural network-based methods）：CNN 等；

### MSCNN 的整体结构：

1. 变换阶段（Transformation Stage）：包括恒等变换，下采样，谱变换等变换方式，每一种方式都是一个分支，并且也是卷积神经网络的输入；
2. 局部卷积（Local Convolution Stage）：使用卷积层来对不同的输入提取特征，不同的输入分支之间是相互独立的，输出的时候都会经过一个最大值池化（max pooling）的过程；
3. 整体卷积（Full Convolution Stage）：把上一步提取到的特征进行拼接（concatenate），然后使用全连接层并且加上一个 softmax 层来做多分类。

$T^{\ell}=(x_{i}+x_{i+1}+\cdots+x_{i+\ell-1})/\ell, 0\leq i\leq n-\ell+1$,

$T^{k} = \{t_{1+k\cdot i}\}, 0\leq i \leq [(n-1)/k]$.

### 数据增强

$S_{i:j} = \{t_{i}, t_{i+1},\cdots,t_{j}\}, 1\leq i,\leq j\leq n$

$Slicing(T,s) = \{S_{1:s},S_{2:s+1},\cdots,S_{n-s+1:n}\}$,

## GASF 和 GADF 方法

$\tilde{x}_{0}^{i} = (x_{i} - \min(X))/(\max(X) -\min(X))$,

$\tilde{x}_{-1}^{i} = ((x_{i} - \max(X)) + (x_{i}-\min(X)))/(\max(X) - \min(X))$,

$GASF = [\cos(\phi_{i}+\phi_{j})]_{1\leq i,j\leq n}$

$GASF = [\cos(\phi_{i})\cdot \cos(\phi_{j}) - \sin(\phi_{i})\cdot \sin(\phi_{j})]_{n\times n}$

$\tilde{X}=(\cos(\phi_{1}),\cdots,\cos(\phi_{n}))^{T}$，可以得到

$GASF = \tilde{X} \cdot \tilde{X}^{T} - \sqrt{I - \tilde{X}^{2}} \cdot \sqrt{I - \tilde{X^{T}}^{2}}$

$diag(GASF) = \{\cos(2\phi_{1}),\cdots, \cos(2\phi_{n})\}$

$= \{2\cos^{2}(\phi_{1})-1,\cdots,2\cos^{2}(\phi_{n})-1)\} = \{GASF_{ii}\}_{1\leq i\leq n}.$

$GADF = [\sin(\phi_{i}-\phi_{j})]_{1\leq i,j\leq n}$

$= [\sin(\phi_{i})\cdot cos(\phi_{j}) - \cos(\phi_{i})\cdot\sin(\phi_{j})]_{1\leq i,j\leq n}$

$= \sqrt{1-X^{2}}\cdot X^{T} - X \cdot \sqrt{1-(X^{T})^{2}}$.

## Markov Transition Field（MTF）

1. 分段聚合（PAA）：使用局部平均等方法，把时间序列进行降维；
2. 核变换（Kernel）：使用 Bivariate Gaussian 核或者均值核来把时间序列进行降维。

## Multi-Channels Deep Convolutional Neural Networks

1. Filter Layer：
2. Activation Layer：
3. Pooling Layer：
4. Fully-Connected Layer：

## 参考资料：

1. Wang Z, Yan W, Oates T. Time series classification from scratch with deep neural networks: A strong baseline[C]//2017 international joint conference on neural networks (IJCNN). IEEE, 2017: 1578-1585.
2. Cui Z, Chen W, Chen Y. Multi-scale convolutional neural networks for time series classification[J]. arXiv preprint arXiv:1603.06995, 2016.
3. Wang Z, Oates T. Imaging time-series to improve classification and imputation[C]//Twenty-Fourth International Joint Conference on Artificial Intelligence. 2015.
4. Wang Z, Oates T. Encoding time series as images for visual inspection and classification using tiled convolutional neural networks[C]//Workshops at the Twenty-Ninth AAAI Conference on Artificial Intelligence. 2015.
5. Liu L. Encoding Temporal Markov Dynamics in Graph for Time Series Visualization, Arxiv, 2016.
6. Fawaz H I, Forestier G, Weber J, et al. Deep learning for time series classification: a review[J]. Data Mining and Knowledge Discovery, 2019, 33(4): 917-963.
7. Zhao B, Lu H, Chen S, et al. Convolutional neural networks for time series classification[J]. Journal of Systems Engineering and Electronics, 2017, 28(1): 162-169.
8. Le Guennec A, Malinowski S, Tavenard R. Data augmentation for time series classification using convolutional neural networks[C]. 2016.

# 时间序列的标签

Label-Less 的交互页面如下所示：