Processing math: 100%
28 Jan

三个球的交点坐标(三球交会定位)

前几天笔者在思考一个问题时,联想到了三球交点问题,即给定三个球的球心坐标和半径,求这三个球的交点坐标。按理说这是一个定义清晰且简明的问题,并且具有鲜明的应用背景(比如卫星定位),应该早已有人给出“标准答案”才对。但笔者搜了一圈,发现不管是英文资料还是中文资料,都没有找到标准的求解流程。

当然,这并不是说这个问题有多难以至于没人能求解出来,事实上这是个早已被人解决的经典问题,笔者只是意外于似乎没有人以一种可读性比较好的方式将求解过程写到网上,所以本文试图补充这一点。

特殊情形

首先,设三个球的方程分别是
球1:(xo1)2=r21球2:(xo2)2=r22球3:(xo3)2=r23

点击阅读全文...

26 Sep

脑洞大开:非线性RNN居然也可以并行计算?

近年来,线性RNN由于其可并行训练以及常数推理成本等特性,吸引了一定研究人员的关注(例如笔者之前写的《Google新作试图“复活”RNN:RNN能否再次辉煌?》),这让RNN在Transformer遍地开花的潮流中仍有“一席之地”。然而,目前看来这“一席之地”只属于线性RNN,因为非线性RNN无法高效地并行训练,所以在架构之争中是“心有余而力不足”。

不过,一篇名为《Parallelizing Non-Linear Sequential Models over the Sequence Length》的论文有不同的看法,它提出了一种迭代算法,宣传可以实现非线性RNN的并行训练!真有如此神奇?接下来我们一探究竟。

求不动点

原论文对其方法做了非常一般的介绍,而且其侧重点是PDE和ODE,这里我们直接从RNN入手。考虑常见的简单非线性RNN:
xt=tanh(Axt1+ut)

点击阅读全文...

21 Jul

思考:两个椭圆片能粘合成一个立体吗?

前两周又在群里看到一个颇为有趣的问题:两个同样大小的椭圆片可以沿着它们的长轴弯曲,沿着边缘线粘贴,能完美地贴合成一个封闭立体吗?问题来源于知乎《两个椭圆片可否以柱面弯曲边缘完美贴合?》

两个椭圆片粘合图示(截取自知乎上提问的图示)

两个椭圆片粘合图示(截取自知乎上提问的图示)

问题可以用只言片语表达清楚,甚至普通读者都能理解,而问题本身是有一定难度的,这就符合了一个漂亮的问题的条件,所以也就吸引了笔者陆陆续续思考了好多天,最终在昨天算是给出了这类问题通用的列方程思路和数值求解方案,而今天则完成了理论证明,确认两个相同椭圆片总是可以完美贴合

点击阅读全文...

7 Dec

一阶偏微分方程的特征线法

本文以尽可能清晰、简明的方式来介绍了一阶偏微分方程的特征线法。个人认为这是偏微分方程理论中较为简单但事实上又容易让人含糊的一部分内容,因此尝试以自己的文字来做一番介绍。当然,更准确来说其实是笔者自己的备忘。

拟线性情形

一般步骤

考虑偏微分方程
α(x,u)xu=β(x,u)
其中α是一个n维向量函数,β是一个标量函数,是向量的点积,uu(x)n元函数,x是它的自变量。

点击阅读全文...

24 Dec

用二次方程判别式判断正定矩阵

快要学期末了,不少学霸开始忙碌起来了。不过对非学霸的我来说,基本上每天都是一样的,希望把自己感兴趣的东西深入研究下去,因为我觉得,真正学会点有用的东西才是最重要的。数学分析和高等代数老师都要求写课程论文,我也写了我比较感兴趣的“欧拉数学”和“超复数研究”,之后会把这部分内容与大家分享。

虽然学期已经接近尾声了,但是我们的课程还没有上完。事实上,我们的新课一直上到十八周~随着考试的接近,我们的《高等代数》课程也已经要落幕了。最近在上的是二次型方面的内容,讲到正定二次型和正定矩阵。关于正定矩阵的判别,教科书上提供了两个判别方法,一个是基于定义的初等变换,另外一个就是主子式法。前者无可厚非,但是后者我似乎难以理解——它虽然是正确的,但是它很丑,计算量又大。我还没有想清楚主子式法到底有什么好的?在我看来,本文所探讨的基于二次方程判别式的方法才是简单、快捷的。

正定二次型
所谓正定二次型,就是关于n个变量x1,x2,...,xn的二次齐次函数,只要xi不全为0,它的值恒为正数。比如
2x21+x222x1x2=x21+(x2x1)2
这是一个比较简单的正定二次型,多元的还有
5x21+x22+5x23+4x1x28x1x34x2x3

点击阅读全文...

22 May

当Matlab遇上牛顿法

牛顿法是求方程近似根的一个相当有用而且快捷的方法,我们最近科学计算软件课程(Matlab)的一个作业就是编写求方程近似解的程序,其中涉及到牛顿法。我们要实现的目标是,用户输入一道方程,脚本就自动求出根来。这看起来是一个挺简单的循环迭代程序,但是由于Matlab本身的特殊性,却产生了不少困难。

Matlab是为了数值计算(尤其是矩阵运算)而生的,因此它并不擅长处理符号计算。这就给我们编程带来了困难。在网上随便一搜,就可以发现,网上的Matlab牛顿法程序都是要求用户同时输入方程及其导函数,这显然是不方便的,因为Matlab本身就具备了求导功能。下面我们来分析一下困难在哪里。

我们要实现的最基本功能是定义一个函数,然后可以根据该函数求具体的函数值,并且自动求该函数的导数,接着求导数值。这些看起来很基本的功能在Matlab中却很难调和,因为Matlab的“函数”定义很广,一个具有特定功能的M文件叫“函数”,一个运算式f(x)也可能是一个函数,显然后者是可以求导的,前者却不行,所以Matlab一刀砍——不能对函数求导!!

点击阅读全文...

11 Dec

薛定谔方程的启发式推导

===聊聊天===

上个月在网上买了三本相对论教材和一本《量子力学概论》,本打算好好研究下相对论的数学体系,可是书到了之后,我却深深地被量子力学吸引住了,不停在研读。而且在研究量子力学的同时,我的线性代数和微分方程知识也增加了不少,这确实是我没有想到的。在我看来,不管是狭义相对论还是广义相对论,它本质上都是一种几何理论,你总要想象从一个参考系观测会发生什么,然后从另外一个参考系又会看到什么;而量子力学虽然对我来讲一切都是新鲜的,但是它的数学性比较强,主要是微分方程的求解和理解。我想这也是我对量子力学更感兴趣的原因吧,因为我善于代数而不善于几何。

量子力学中让我最神往的内容莫过于费曼所发明的路径积分形式。资料记载费曼用他发明的方法在一个晚上就算出了别人几个月才算出来的结果,可见路径积分形式的优越性。当然,我也清楚,这个路径积分并不简单,它涉及到了泛函积分这一非常高深的内容,对于我这个连数学分析都还没有学好的小孩来说,泛函是难以触摸的。不过,我还是尽量想办法向它靠近。为此,我还浏览到了一些不少让人兴奋的内容,比如薛定谔的方程的推导、力学-光学类比、雅可比方程等等。

很遗憾,在正统的量子力学教材中,这些让我很兴奋的内容却鲜有涉及,有的话大多数都是一笔带过的感觉。多数量子力学不会讲到路径积分,就算有也只是作为附录。对于薛定谔方程的推导,也没有涉及到。这也让我养成了一个习惯意识:书本最有趣的东西往往都是在附录。所以对于教科书,那么写得正正式式的内容我一概没有兴趣,那些附录内容才是我最喜欢读的。可是,那些让人兴奋的内容却不一定是很难的,就像下面的薛定谔方程的启发式推导,它不仅不难,而且易于理解。

===薛定谔方程===

在量子力学诞生之前,科学家已经通过实验发现光既有波动性也有粒子性,而德布罗意提出也同时具有波动性和粒子性,这些都奠定了量子力学的基础。根据量子论,一个光子的能量可以由E=hν=(2πν),其中ν是频率,=h2π,h是普朗克常数,习惯记ω=2πν,即E=ω

点击阅读全文...

19 Jul

一道整数边三角形题目

这是一道来自“数联天地”的题目:

三边长均为整数的三角形,周长为1000,其中一个内角是另外一个内角的两倍。求三边长度

咋看上去这是一道几何题目,但实际上这是一道初等数论题,而且主要是不定方程问题。类似的题目在数学竞赛中其实有可能出到,在这里和大家探讨一番。话说回来,其实笔者小时候很喜欢数论方面的内容的,在小学和初中,经常围绕着“素数”、“完全数”、“亲和数”、“大数分解”等等名词钻研看书。现在学习了微积分等内容之后,兴趣逐渐转向了实用性较强的数学,因而数论内容的水平不高,大家见笑了。

点击阅读全文...