15 Jul

《新理解矩阵6》:为什么只有方阵有行列式?

学过线性代数的朋友都知道,方阵和非方阵的一个明显不同是,对于方阵我们可以计算它的行列式,如果不是方阵的话,就没有行列式这个概念了。在追求统一和谐的数学系统中,为什么非方阵却没有行列式?也许对于这个问题最恰当的回答是——因为不够美。对于非方阵,其实也可以类似地定义它的行列式,定义出来的东西,跟方阵的行列式具有同样的性质,比如某行乘上一个常数,行列式值也就乘以一个常数,等等;而且还可以把其几何意义保留下来。但是,非方阵的行列式是不够美的,因为对于一个一般的整数元素的方阵,我们的行列式是一个整数;而对于一个一般的整数元素的非方阵,却导致了一个无理数的行列式值。另外,一个也比较重要的原因是,单单是方阵的行列式也够用了。综合以上两个理由,非方阵的行列式就被舍弃不用了。

非方阵的行列式不够漂亮

$n$阶方阵的行列式是每个向量的线性函数,它代表着向量之间的线性相关性;从几何上来讲,它就是向量组成的平行n维体的(有向)体积。我们当然期望非方阵的行列式也保留这些性质,因为只有这样,方阵行列式的那些运算性质才得以保留,比如上面说的,行列式的一行乘上一个常数,行列式值也乘上一个常数。我们考虑$m\times n$的矩阵,其中$ m < n $,我们将它看成是$m$个$n$维向量的组合。最简单的,我们先考虑$1\times 2$矩阵的行列式,也就是二维向量$(a,b)$的行列式。

点击阅读全文...

6 Jul

齐次多项式不等式的机器证明(差分代换)

在高中阶段,笔者也像很多学生一样参加过数学竞赛,而在准备数学竞赛的过程中,也做过一些竞赛题,其中当然少不了不等式题目。当时,面对各种各样的不等式证明题,我总是非常茫然,因为看到答案之后,总感觉证明的构造非常神奇,但是每当我自己独立去做时,却总想不出来。于是后来就萌生了“有没有办法可以通用地证明这些不等式?”的想法。为了实现这个目的,当时就想出了本文的技巧——通过牺牲计算的简便性来换取证明的有效性。后来,我虽然没有走上数学竞赛这条路,但这个方法还是保留了下来,近日,在和数学研发论坛的朋友们讨论不等式问题时,重新拾起了这个技巧。

此前,在本博客的文章《对称多项式不等式的“物理证明”》中,已经谈到了这个技巧,只是限制于当时的知识储备,了解并不深入。而在本文中,则进行拓展了。这个技巧在当时是我自己在证明中独立发现的,而现在在网上查找时发现,前辈们(杨路、姚勇、杨学枝等)早已研究过这个技巧,称之为“差分代换”,并且已经探究过它在机器证明中的作用。该技巧可以很一般化地用于齐次/非其次不等式的证明,限于篇幅,本文只谈齐次多项式不等式,特别地,是对称齐次多项式不等式,并且发现某些可以简化之处。

点击阅读全文...

1 Jul

勾股数的通解及其推广

在之前的文章《几何的数与数的几何:超复数的浅探究》中,我们谈及过四元数。四元数源于把复数的$|(a+bi)(c+di)|=|a+bi|\times|c+di|$这一独特的性质进行高维推广。为什么偏爱这一性质?读者或许已经初步知道一些用到复数的这一性质的例子,有几何方面的,也有物理方面的,这一性质为处理模长相关问题带来了美妙的方便。本文介绍它在求三元二次齐次不定方程的整数通解中的应用,这一例子同样展示了复数这一性质的神奇,让我们不得不认同当初哈密顿为了将其推广到高维而不惜耗费十年光阴的努力。

勾股数问题

读者或许已经知道,勾股数,也就是满足
$$x^2+y^2=z^2$$
的所有自然数解,由下面公式给出
$$x=a^2-b^2,\quad y=2ab,\quad z=a^2+b^2$$

点击阅读全文...

27 Jun

Project Euler 454 :五天攻下“擂台”

进入期末了,很多同学都开始复习了,这学期我选的几门课到现在还不是很熟悉,本想也在趁着这段时间好好看看。偏生五天前我在浏览数学研发论坛的编程擂台时看到了这样的一道题目

设对于给定的$L$,方程
$$\frac{1}{x}+\frac{1}{y}=\frac{1}{n}$$
满足$0 < x < y \leq L$的正整数解共有$f(L)$种情况。比如$f(6)=1,f(12)=3,f(1000)=1069$,求$f(10^{12})$。

这道题目的来源是Project Euler的第454题:Diophantine reciprocals III(丢潘图倒数方程),题目简短易懂,但又不失深度,正符合我对理想题目的定义。而且最近在学习Python学习得不亦乐乎,看到这道题目就跃跃欲试。于是乎,我的五天时间就没有了,而且过程中几乎耗尽了我现在懂的所有编程技巧。由于不断地测试运行,我的电脑发热量比平时大了几倍,真是辛苦了我的电脑。最后的代码,自我感觉已经是我目前写的最精彩的代码了。在此与大家共享和共勉~

上述表达式是分式,不利于编程,由于$n=\frac{xy}{x+y}$,于是上述题目也等价于求$(x+y)|xy$(意思是$x+y$整除$xy$)的整数解。

点击阅读全文...

18 Jun

线性微分方程组:已知特解求通解

含有$n$个一阶常微分方程的一阶常微分方程组
$$\dot{\boldsymbol{x}}=\boldsymbol{A}\boldsymbol{x}$$
其中$\boldsymbol{x}=(x_1(t),\dots,x_n(t))^{T}$为待求函数,而$\boldsymbol{A}=(a_{ij}(t))_{n\times n}$为已知的函数矩阵。现在已知该方程组的$n-1$个线性无关的特解$\boldsymbol{x}_1,\boldsymbol{x}_2,\dots,\boldsymbol{x}_{n-1}$(解的列向量),求方程的通解。

这是我的一位同学在6月5号问我的一道题目,我当时看了一下,感觉可以通过李对称的方法很容易把解构造出来,当晚就简单分析了一下,发现根据李对称的思想,由上面已知的信息确实足以把通解构造出来。但是我尝试了好几天,尝试了几何、代数等思想,都没有很好地构造出相应的正则变量出来,从而也没有写出它的显式解,于是就搁置下来了。今天再分析这道题目时,竟在无意之间构造出了让我比较满意的解来~

点击阅读全文...

11 Jun

用PyPy提高Python脚本执行效率

《两百万前素数之和与前两百万素数之和》中,我们用Python求了前两百万的素数和以及两百万前的素数和,并且得到了在Python 3.3中的执行时间如下:

两百万前的素数之和:
142913828922
time: 2.4048174478605646

前两百万的素数之和:
31381137530481
time: 46.75734807838953

于是想办法提高python脚本的执行效率,我觉得在算法方面,优化空间已经比较小了,于是考虑执行器上的优化。在搜索的无意间我看到了一个名词——Psyco!这是python的一个外部模块,导入后可以加快.py脚本的执行。网上也有《用 Psyco 让 Python 运行得像 C一样快》、《利用 psyco 让 Python 程序执行更快》之类的文章,说明Psyco确实是一个可行的选择,于是就跃跃欲试了,后来了解到Psyco在2012年已经停止开发,只支持到Python 2.4版本,目前它由 PyPy所接替。于是我就下载了PyPy

点击阅读全文...

10 Jun

两百万前素数之和与前两百万素数之和

标题说了两道比较好玩的编程题,如果读者觉得标题绕的让人眩晕的话,那么让我再说得清晰一点:

两百万前素数之和指的是所有不超过两百万的素数的和;
前两百万素数之和指的是前两百万个素数的和。

我是从子谋的blog中看到这道题目的,前一道题目是Project Euler的第10题,后一道则是我跟子谋探索着玩的。关于子谋的研究和代码,大家可以去他的blog上学习。本文分享一下我自己的想法。

点击阅读全文...

4 Jun

当概率遇上复变:随机游走与路径积分

我们在上一篇文章中已经看到,随机游走的概率分布是正态的,而在概率论中可以了解到正态分布(几乎)是最重要的一种分布了。随机游走模型和正态分布的应用都很广,我们或许可以思考一个问题,究竟是随机游走造就了正态分布,还是正态分布造就了随机游走?换句话说,哪个更本质些?个人就自己目前所阅读到的内容来看,随机游走更本质些,随机游走正好对应着普遍存在的随机不确定性(比如每次测量的误差),它的分布正好就是正态分布,所以正态分布才应用得如此广泛——因为随机不确定性无处不在。

下面我们来考虑随机游走的另外一种描述方式,原则上来说,它更广泛,更深刻,其大名曰“路径积分”。

点击阅读全文...