迈出量子力学的第一步:矩阵的运算

长文预警,可以按需分次看完。 公式显示不完整的可以尝试划动公式。 本文会涉及上一篇文章小学毕业就可以学的线性代数知识:从线性方程组到行列式的内容,建议略作浏览。 上一篇文章我们引入了非常重要的东西——矩阵,但是由于篇幅原因并没有展开讲,所以今天我们...
继续阅读 »




长文预警,可以按需分次看完。


公式显示不完整的可以尝试划动公式。






本文会涉及上一篇文章小学毕业就可以学的线性代数知识:从线性方程组到行列式的内容,建议略作浏览。




上一篇文章我们引入了非常重要的东西——矩阵,但是由于篇幅原因并没有展开讲,所以今天我们来补上它。


Part1矩阵的加法和数量乘法


回忆一下上一篇文章关于矩阵的定义:


首先,我们把 个数排成的 行、 列的一张表



称为一个 矩阵,其中 个数称为该矩阵的元素。


另外,矩阵 的第 行与第 列交叉位置的元素 称为 元,记作


还有,元素全为0的矩阵称为零矩阵;行数和列数相等的矩阵叫做方阵; 元线性方程组的系数组成的矩阵叫做系数矩阵,加上等号右侧的一列之后便是增广矩阵。


最后,我们把行数,列数都相等,且对应位置的元素相等的矩阵看作是相同的。


矩阵的加法


这个问题看起来无法操作,所以我们不妨考虑一下我们比较熟悉的矩阵——增广矩阵。如果两个增广矩阵相加,其实我们就是在把两个线性方程组相加,所以显然应该是对应系数相加。


所以我们引出了矩阵的加法的定义



对于数域 上的两个 矩阵 ,令矩阵 也是 矩阵,且 ,其中 ,则



矩阵的数量乘法


所谓数量乘法,就是一个数和矩阵相乘,也就是一个数和一个线性方程组乘起来。所以我们得到定义



对于数域 上的 矩阵 和数 ,令 也是 矩阵,且 ,其中 ,则



Part2 维向量空间


看完了矩阵的加法和数量乘法,你是不是有一种熟悉的感觉。没错,这和我们高中学过的向量一模一样。而且数学家给他们的符号又是如此相似(都是几个数加括号),好像单行的向量就是矩阵的一部分一样。所以我们不难想到,研究向量一定会对矩阵的研究有帮助。那么我们就来看看这个我们熟悉的向量。


维向量空间


高中我们学过的向量是几何空间的元素,每个向量有两个或三个分量。为了描述矩阵,我们就不能只局限于这样的向量,我们仿照几何空间上的向量的概念,提出 维向量的概念。


为了更好的和矩阵适配,我们还区分行向量和列向量。顾名思义,类似

这种排成一行的叫行向量,类似
的叫列向量。其中 是数域 上的元素(本文所有数都是数域 的元素,用小写英文字母表示,下文不再赘述)。本篇文章中的性质不涉及行向量与列向量之间的区别,所以我们可以只研究列向量(用大写字母表示)。


仿照几何空间,我们把所有 维列向量组成的集合叫作 维向量空间,如果向量的分量都来自
数域 ,我们就把这个集合记作 。在 中,加法和数量乘法与高中所学的一致。


线性相关和线性无关的向量组


我们在高中学习过几何空间中向量的合成与分解,那么在运算完全相同的 维向量空间,理论上也可以进行向量的合成与分解。



为了方便交流,我们称 线性表出


到了这里,我们必然会想到,对于一组向量 ,向量 由它们表出的方式是否唯一。


我们假设





(黑体0区分于普通的零表示分量全为零的向量,简称零向量)


所谓表出方式唯一就是(1)(2)完全相同,用数学语言,换言之,(3)中的系数全为零。


所以我们引出线性无关的定义



对于 中的向量组 ,如果满足只有当 全等于0时才能使



成立,则称向量组 线性无关



与之相对的概念是线性相关



对于 中的向量组 ,如果有一组不全为零的数 使



成立,则称向量组 线性相关



综上,我们知道了如果可以线性表出,想要表出方式唯一,就要线性无关。


向量组的秩


线性无关的向量组可以唯一的线性表出一个向量,可见线性无关这个概念的重要性。但是我们遇到的向量组很可能是线性相关的,所以我们就需要找到其中线性无关的部分。不过仔细想想,向量组中任一非零向量都可以看作是线性无关的,只是找线性无关的向量就没什么意思了,我们应该找到尽可能多的线性无关的向量,直到再多一个就会线性相关。也就是找到向量组的极大线性无关组


极大线性无关组就是一个向量组中的一个含有最多线性无关向量的部分组,这个最多的意思是再原向量组再额外挑一个向量加入这个部分组,都会是这个部分组线性相关。


极大线性无关组的寻找方法就是先找一个向量,再一个一个添加向量,时刻保证新向量组线性无关,直到一个向量也填不进去为止。


现在对于一个向量组和它的一个极大线性无关组,如果我们从不属于这个极大线性无关组的向量挑起,就可以生成一个不同的极大线性无关组。看来对于一个向量组,可以有不同的极大线性无关组,那么这些极大线性无关组有什么关系呢?


为了方便接下来的交流,我先引入一个概念



如果一个向量组 的所有元素都可以由另一个向量组 线性表出,就称向量组 可以由向量组 线性表出。如果两个向量组可以互相线性表出,则称两个向量组等价



首先我们可以证明向量组和它的极大线性无关组等价。不妨设向量组 的一个极大线性无关组是 。很显然向量组 的前 个向量都可以由它的极大线性无关组线性表出,我们来看其余的向量。根据极大线性无关组的定义,我们把 中任意一个向量 添入极大线性无关组得到 ,这个向量组肯定是线性相关的,即有一组不全为零的数 ,使得



这个式子里,如果 ,则 不全为零,且(1)式变为



不符合 线性无关。所以 ,那么有



中任意一个向量 可以由 线性表出。综上,向量组可以由它的极大线性无关组线性表出,又因为显然有极大线性无关组可以由原向量组线性表出。所以向量组和它的极大线性无关组等价。


第二步,我们证明一个向量组的所有极大线性无关组等价。由于我们已经证明了极大线性无关组和原向量组等价,所以我们只需要证明向量组等价的传递性,即线性表出的传递性,也就是给定条件: 可由 线性表出, 可由 线性表出。求证 可由 线性表出。这很简单,只需要把 线性表出 的式子代入 线性表出 的式子,就能得到 线性表出 的式子。所以向量组的所有极大线性无关组等价。


现在我们只需要知道等价线性无关向量组有什么关系,就是我们问题的答案。


这里我们首先要证明:若 线性表出,且 线性无关,则


用反证法,假设


然后把 线性表出这个条件翻译成数学语言



则有



接下来看如下方程组



首先,


是该线性方程组的一组解。又因为我们假设 ,即方程组的增广矩阵经过初等行变换得到的简化行阶梯形矩阵主元数大于行数。所以方程组有除了
的另一组不同的解,即一组不全为0的数

又因为刚才我们得到





(不全为0)代入,得



所以 线性相关,与假设矛盾。即若 线性表出,且 线性无关,则


利用这个结论,我们可以轻松的知道一个向量组的两个极大线性无关组 之间的的关系。


前两步我们证明了它们是等价的,即他们可以互相线性表出。所以有 ,所以只能是 ,即向量组的所有极大线性无关组个数相等。


既然极大线性无关组的概念如此重要,我们就把一个向量组的极大线性无关组的个数叫做向量组的


Part3矩阵的秩


嗯,向量的性质我们已经研究的差不多了,该回归我们的主线了。


矩阵的行秩和列秩


我们之前说过,向量可以看作矩阵的一部分,接下来让我们看看这么做的好处。


对于一个矩阵



我们把它的 行看作 个向量,叫做行向量,它们构成的向量组叫做行向量组;它的 列看作 个向量,叫做列向量,它们构成的向量组叫做列向量组


行向量组和列向量组的秩分别叫作行秩列秩


阶梯形矩阵的行秩和列秩



这是一个 矩阵,有 个非零行,也就是有 个主元,分别位于第 ,第 ,第 列。(前三列和后三行是为了严谨加上的零行,用黑体区分,阅读时可忽略。)


把这个矩阵的行向量组记为 ,其中 是非零向量,也是主元所在行的行向量;列向量组记为 ,其中 是非零向量, 是主元所在列的列向量。


首先我们我们来看所有主元所在行的行向量






给出判定线性无关的式子



根据向量的加法和数量乘法,以及向量相等的定义,可得



首先有作为主元的数。那么根据(1)式,有;接下来根据(2)式,有;依此类推,全部为零,所以线性无关。


接下来想证的极大线性无关组,就是要证明再添进来任何一个向量,都会使新向量组线性相关。


由于我们只剩下零向量没有添进来,所以当我们添进来一个零向量,有



说明新向量组线性相关。所以的极大线性无关组,阶梯形矩阵的行秩为


接下来看阶梯形矩阵的主元所在列的列向量



再次构造一个判定线性无关的式子



根据向量的加法和数量乘法,以及向量相等的定义,可得



仿照刚才的过程,不过这次我们从式开始,不难得到全部为零,所以线性无关。


接下来想证的极大线性无关组,就是要证明再添进来任何一个向量,都会使新向量组线性相关。


首先前列都是零向量,添入后显然会线性相关。


接下来是第列到第



例如,我们把添入。这时我们有



这正是线性相关的表达式。第列到第列的其它向量同理。


然后我们看第列到



例如,我们把添入。这时我们有



这正是线性相关的表达式。第列到列的其它向量同理。


依此类推,我们可以证明的极大线性无关组,也就是阶梯形矩阵的列秩是


综上,我们得到了阶梯形矩阵的行秩和列秩相等,对于阶梯形矩阵的非零行个数。


矩阵的秩


我们知道了阶梯形矩阵的行秩等于列秩,又知道任何一个矩阵可以通过初等行变换变换变成阶梯形矩阵。那么我们不妨猜测,矩阵的初等行变换不会改变矩阵的行秩和列秩,这样所有矩阵的行秩和列秩就相等了。


首先证明矩阵的初等行变换不改变矩阵的行秩,也就是证明初等行变换前后的行向量组等价。


证明行秩相等需要我们回忆一下之前的知识,任给两个等价的向量组,根据等价的传递性可以知道这两个向量组的极大线性无关组是等价的,所以这两个极大线性无关组所含向量个数相等。换言之,等价的向量组有相等的秩。


我们设矩阵的行向量组为,它经过初等行变换可能会变成以下三种可能。





而证明等价就是要证明互相线性表出,这很简单,读者不妨自行尝试。


证明矩阵的初等行变换不改变矩阵的列秩。这个问题比上一个复杂了不少,你可千万不要以为二者是相同的,如果我们设矩阵的列向量组为,它经过初等行变换可不会变成





要想解决这个问题,我们首先要证明和秩的概念关系密切的相关性的概念,也就是证明矩阵的初等行变换不改变矩阵列向量组的相关性。我们假设矩阵列向量组是,变换后是


先写出判定相关性的式子




根据分量相等可以写出两个方程组,一个以为系数矩阵,一个以初等行变换后的矩阵为系数矩阵,它们两个的增广矩阵也是相差了一个初等行变换(因为两个增广矩阵最后一列都是零),所以两个方程同解,即





所以两个向量组相关性完全一致。


如果我们只取出其中几个向量,比如,由于,所以相关性相同。


也就是说两个向量组的部分组(向量组的子集)相关性完全一致,进而不难得到两个向量组秩相同。


综上,对一个矩阵进行初等行变换,矩阵的行秩和列秩不会改变。又由于对于一个矩阵进行初等行变换总可以变为阶梯形矩阵,所以矩阵的行秩和列秩与它的阶梯形矩阵一样,都相等且等于非零行个数。我们把这个数叫做矩阵的秩


Part4矩阵的乘法


刚才我们知道

这种式子可以看作一个方程组,还有增广矩阵可以看作一个线性方程组,这些是简化线性方程组写法的方法。其实还有一种简化线性方程组写法的方法,我们可以把线性方程组



写成



矩阵的乘法的定义


要想(2)式展开后等于(1)式,我们可以定义矩阵的乘法如下



一个矩阵(记为)和矩阵(记为)的乘积为一个矩阵(记为)。其中元是的第行(有个元素)和的第列(有个元素)对应相乘再相加的结果。



例如,计算如下两个矩阵的乘法



先是是左矩阵第一行和右矩阵第一列对应相乘再相加,即



作为矩阵的第一行和第一列交叉位置的元素。


依次类推,可得积矩阵为



不难看出矩阵的乘法必须满足左矩阵列数与右矩阵行数相等,本文接下来的所有矩阵乘法如果不特殊说明均满足此条件。


另外,上述例子也可以说明矩阵乘法没有交换律,不信你可以自己算一下。


矩阵的分块


矩阵的乘法可以简单概括为左矩阵的第行和右矩阵的第列对应相乘再相加作为结果的元,那如果我把左矩阵的每一行看作一个整体,写成行向量;右矩阵的每一列写成列向量,再相乘,会得到



其中



正是我们结果矩阵的元。所以(3)式是



的一个很好的简化。


那么,我们可以类比这个化简方法,看看能不能把矩阵化成一个个矩阵块,然后对由矩阵块构成的矩阵作乘法。由于加法和数量乘法都能在分块的过程中保留,所以如果矩阵的乘法也能在分块的过程中得以保留,那将会是一个很好的结果,所以让我们来看一下下式是否成立。



式中,每一个大写字母都是一个矩阵。而且除了大矩阵相乘时左矩阵列数与右矩阵行数相等,作为元素的小矩阵相乘时也要满足左矩阵列数与右矩阵行数相等。


先来验证一种简单的情况,就是我们把大矩阵分成几个横着排或竖着排的小矩阵。类似这样



它的一般形式是





(5)式中的每一个元素



正好是(4)式中的矩阵块。所以这种化简是合理的。


现在来看最一般的情形,也就是



一方面,这个式子的左边可以按(3)式化简,变成



不知道你有没有注意到式中的问号,你可以想一下为什么要有这个问号。


我来揭晓答案,因为这个式子中的虽然都是向量,但是这些向量的分量不再是数,而是矩阵。


所以你应该知道为什么我证明了一下(4)到(5)的成立,因为这正好补充了这个问题。


分块矩阵的应用


分块矩阵的一个重要应用是可以可以简化有关矩阵的证明过程,例如我们可以用它证明一下矩阵的乘法的结合律,即


我们把三个矩阵分别写成





所以有




所以矩阵的乘法具有结合律。


倘若我们不用分块矩阵,过程会比现在复杂的多。



收起阅读 »

小学毕业就可以学的线性代数知识:从线性方程组到行列式

长文预警,可以按需分次看完。 公式显示不完整的可以尝试划动公式。 另外:如果你真的是小学生,那我先向你致以崇高的敬意。但是我要提醒你,你可能会遇到一些还没学的概念,不过放心,这些概念都很基础,在网上搜索一下便可以了解这些概念,不会影响你的阅...
继续阅读 »


长文预警,可以按需分次看完。


公式显示不完整的可以尝试划动公式。






另外:如果你真的是小学生,那我先向你致以崇高的敬意。但是我要提醒你,你可能会遇到一些还没学的概念,不过放心,这些概念都很基础,在网上搜索一下便可以了解这些概念,不会影响你的阅读(排列组合的知识可以看我的上一篇文章排列组合到底是什么)。




Part1n阶矩阵的引入


生活中总会遇到许许多多需要用数学来解决的问题,在解决这些问题的过程中我们得出了许多有用的数学工具,其中一种就是方程。从小到大我们遇到过各种各样的方程,不过这次我们要讨论的主要是n元一次方程组,也叫n元线性方程组。


首先我们通过一个例子来概括一下解方程组的一般方法



解这个方程组并不难,这里直接给出答案



为了方便,我们把它简写成



详细过程由读者自行补充。观察可知(1)到(2)的过程对方程组反复施行了三种变换



1 把一个方程的倍数加到另一个方程上


2 互换两个方程的位置


3 用一个非零数乘以某一个方程



这三种变换称为线性方程组的初等变换。


接下来考虑一般的方程组



对于方程组(3),它的系数全部由字母表示,为了保证初等变换的使用不被影响,我们需要引入数域的概念,这样就能保证加减乘除的随意使用了。



如果复数集的一个子集满足:


1 0,1


2 若,则


3 对于中的每个非零数,有


那么称是一个数域



方程组(3)的所有系数和常数项都要属于某个数域。


接下来我们要证明我们概括出来的初等变换可以帮助我们解方程组,即初等变换后的方程组与原方程同解。


先考虑原方程组有解的情况,设(3)的一个解是

。根据方程的解就是找到一组数代入未知元得到恒等式,所以下面的等式组恒成立



对(3)式和(4)式使用初等变换1得到(3')和(4'),因为初等变换的过程只有系数和常数项有关,所以(3')和(4')只有的区别,也就是说,对于(3')这个变换后的方程组,把


代入后依然得到了一组恒等式(4'),仔细想想,这不就是在告诉我们

是(3')的解。也就是说,

既是(3)也是(3')的解。即,初等变换后的方程组与原方程组同解。


再考虑原方程组没有解的情况,用反证法。如果不同解,那么变换后的方程组有解,把它代入后用初等变化反变回原方程组(比如原来×3,现在就÷3),很显然这依然经历了一组初等变换,根据刚才得到的初等变换前后的方程同解,原方程组也有解了,这与假设矛盾,所以变换后的方程组只能没有解。即,这种情况下初等变换后的方程组与原方程组同解。


刚才我们说到,解方程组的过程只对系数和常数做了运算,所以为了简单起见,我们把(3)的系数和常数项单拿出来写成一张表



称为线性方程组(3)的增广矩阵


这样,线性方程组的初等变换就变成了矩阵的初等行变换。



1 把一行的倍数加到另一行上


2 互换两行的位置


3 用一个非零数乘以某一行



同样我们还能得到矩阵的初等列变换



1 把一列的倍数加到另一列上


2 互换两列的位置


3 用一个非零数乘以某一列



这样,我们要解方程组只需要对它的增广矩阵作初等行变换就可以了。


为了方便以后的研究,我们引入一些概念(简单浏览一下,有个印象就行)。


首先,我们把个数排成的行、列的一张表



称为一个矩阵,其中个数称为该矩阵的元素。


另外,矩阵的第行与第列交叉位置的元素称为元,记作


还有,元素全为0的矩阵称为零矩阵;行数和列数相等的矩阵叫做方阵


最后,我们把行数,列数都相等,且对应位置的元素相等的矩阵看作是相同的。


接下来引入本文的重要角色,阶梯形矩阵。它满足:



(1)的零行(即元素全为零的行,如果有的话)在下方。


(2) 的每个非零行的第一个不为零的元素称为主元,主元的列指标(即在第几列)随着行指标(即在第几行)的递增而严格增大。(主元呈阶梯形)



例如


阶梯形矩阵
阶梯形矩阵

但是它不是方程组的解的形式,所以我们还要引入一个更特殊的矩阵,满足:



(1) 是阶梯形矩阵


(2)的主元都是1


(3) 的每个主元所在的列的其余元素都是0



例如


简化行阶梯形矩阵
简化行阶梯形矩阵

这时称是简化行阶梯形矩阵。


别晕,概念虽然多,但都是为了简化解方程组的过程。现在,我们可以把之前复杂的解方程组的过程简化为努力利用初等行变换把方程组的增广矩阵化为简化行阶梯形矩阵的过程,这便是大名鼎鼎的高斯(Gauss)消元法。但是,我们还要发问,高斯消元法可以解所有方程组吗?换言之,任一矩阵都可以经过一系列初等行变换化成简化行阶梯形矩阵吗?(接下来的证明可以跳过,不影响接下来的阅读。)


首先证明任一矩阵都可以经过一系列初等行变换化成阶梯形矩阵。


首先,零矩阵符合阶梯形矩阵的定义,不需要变换。


下面考虑非零矩阵,对矩阵的行数用数学归纳法。


时,该非零矩阵符合阶梯形矩阵的定义。


假设行的非零矩阵都能经过初等行变换化成阶梯形矩阵,现在来看行的情况。首先划掉所有元素全为零的列。然后通过初等行变换2使这第一列的第一行不为零,然后用初等行变换1使这列除了第一行的元素不为零以外全部为零。这样我们得到了如下矩阵



接着划去第一行和第一列,得到一个行的矩阵,根据归纳假设,这个行的矩阵一定可以化成阶梯形矩阵。再把刚才划掉的部分添回来,把所有元素全为零的列添到矩阵的最前端。得到一个行的阶梯形矩阵



(当然,这个矩阵最左面的三列表示的便是那些元素全为零的列,你在学习的时候可以选择性忽略,我加上它只是为了严谨)


据数学归纳法原理,对于一切的正整数行的非零矩阵一定可以化成阶梯形矩阵。


接下来证明任一阶梯形矩阵都可以经过一系列初等行变换化成简化行阶梯形矩阵。


首先,零矩阵是简化行阶梯形矩阵。


下面对非零矩阵的行数作数学归纳法。


时,矩阵就是简化行阶梯形矩阵。


假设行的非零阶梯形矩阵可以经过一系列初等行变换化成简化行阶梯形矩阵。现在来看行的情况。首先用初等行变换3把阶梯形矩阵的主元变成1,然后用初等行变换1把除第一行的主元外所有主元所在列与第一行交叉位置的元素变成0.然后划去第一行和第一行主元所在列及之前的列,得到一个行的阶梯形矩阵,根据归纳假设,这个行阶梯形矩阵可化成简化行阶梯形矩阵。然后把之前划去的元素添回来。得到一个行简化行阶梯形矩阵。


根据数学归纳法原理,对于任意正整数行的非零阶梯形矩阵都可以经过一系列初等行变换化成简化行阶梯形矩阵。


综上所述,任一矩阵都可以经过一系列初等行变换化成简化行阶梯形矩阵。即高斯消元法一定可以解所有方程。


Part2元线性方程组解的情况及其判定


二元线性方程组告诉我们,方程组不一定有解。接下来我们就来看看,到底什么情况下元线性方程组一定有解。


元线性方程组解的情况


这个问题比较大,我们一层一层的来解决它。


之前我们举了一个方程组有解的例子,那么,是不是所有方程组都一定有解呢?显然不是,随便举个例子,如果一个方程组里有这样一个方程,那么这个方程组一定是无解的,因为我们找不到一个满足上述方程的值。


把上述方程写成增广矩阵应该是一个除了最后一个元素不为零,其他元素都是零的矩阵。也就是说,如果方程组的增广矩阵化成的简化行阶梯形矩阵


(其中)这样一行,那么方程组一定无解,因为我们找不到任何一组数满足这一行。


现在来看中没有


(其中)这样一行的情况。假设个非零行,个未知元,根据增广矩阵的定义显然它有列(每个未知元一列,常数项一列)。现在来看方程组的第行,由于没有
这样一行,它的主元不能在最后一列(即第列)。这时为了保证主元的列指标随着行指标的递增而严格增大(主元呈阶梯形),只有两种可能,即。这是因为时已经最多行数的可能了。




,那么个主元,而且的第个主元不在第列,因此个主元分别在第1,2,列。从而必形如



所以,线性方程组有唯一解


可以写成如下形式



这个矩阵有点复杂,我先来解释一下。首先,这是一个简化行阶梯形矩阵,它的主元系数全为1,是它的非主元的未知元的系数。接下来我们来解释一下的下角标的含义,下角标分为三部分,第一部分代表所在的行数(其实最后一列的的下角标也是这个意思);第二部分代表它是处于哪个主元到下一个主元之间的非主元的未知元的系数;第三部分是第二部分的补充,为了区分同在某两个主元之间的非主元的未知元的系数。最后3行代表的是矩阵的所有零行。


当然,即使你没看懂上一段也无妨,你只需要知道这是一个简化行阶梯形矩阵,它的主元系数全为1,是它的非主元的未知元的系数,而下角标只是为了告诉你们它们不一定相等而已。


看懂了这个矩阵,我们来分析它的解的情况。注意到主元只在某一行出现,我们把矩阵变换回方程组,并把主元单独放在等号的一侧,就得到



为了方便交流,我引入两个名词,等号右边的叫做自由未知量,等号左边的叫做主变量,不难看出,自由未知量每取一组值,自变量都能对应一组值,把它们合到一起就是原方程组的一个解,综上,这种情况下的方程组有无穷多解。


综上,我们通过“二分法”讨论了所有情况的方程组,发现方程组的解的情况有且只有三种,当增广矩阵化为的简化行阶梯形矩阵出现

时无解;而有解时,简化行阶梯形矩阵非零行的个数等于未知元的个数时有唯一解,若小于则有无穷多解。


最后强调一点,讨论简化行阶梯形矩阵是因为一般的增广矩阵化为简化行阶梯形矩阵之后可能出现

(两个互相矛盾的方程化简得到)或者零行(两个仅差非零数的倍数的方程化简得到),而这在原来的增广矩阵里是发现不了的。




知道了线性方程组解的情况,我们来考虑能否找到一个方法,不用解方程就可以判定它解的情况。


二阶行列式


古语有云,麻雀虽小,五脏俱全。我们首先来看二元线性方程组的情况。


考虑线性方程组



其中不全为零


用Gauss消元法解方程。首先把原方程的增广矩阵化成



不难看出,时,方程组有唯一解;时,方程组无解或有无穷多解。


总之,或者说是否为0决定了方程组是否有唯一解。而且,这个式子是由方程组的系数决定的,那我们不妨仿照系数矩阵的写法,把这个表达式记为



称为方程组的行列式。


这样,我们只需要找到二阶行列式的展开方法,然后推广到阶,虽然说阶行列式是否为能符合我们的期待还有待证明,但是我们至少知道了一条道路,至于通不通我们再走走看。


先来看二阶行列式是怎么展开的。



首先,展开式有两项。再来看角标,第一项的角标是11,22;第二项是12,21。另外,第一项的符号为正,第二项为负。


整个二阶行列式的展开是被这三个条件限制的,所以我们只要找到阶行列式的这三个条件,就可以写出阶行列式的展开式了。


项数你可能会猜几阶行列式就有几项,可以,没什么问题。接下来看看角标,仔细观察会发现,每一项的角标的第一个数都是1、2,区别在第二个数,第一项是1、2,第二项是2、1,也就是排列顺序不一样。这样,我们发现了一个漏洞,就是我们对项数的猜想有问题,项数应该是角标的全排列的个数,即项。至于符号,我们发现,当角标第二项正着排时,符号为正;反着排时符号为负。所以我们猜想当一串数有奇数对反着排的数对时,符号为负,反之为正。


阶行列式


总结一下,我们从二阶行列式猜测出的阶行列式的展开的规则是



1 有


2 每一项的行指标(角标的第一个数)呈自然序,列指标(角标的第二个数)是元排列(1~的全排列)中的一个。


3 元排列的逆序数(反着排的数对的个数,记作)是奇数时,符号为负(奇排列),反之为正(偶排列)。



写成数学表达式是



很复杂对吧,不过没关系,这个数学表达式意义不大,当你真的需要展开一个行列式时,你的思路应该是利用之前小方框里的方法,然后根据下角标找到对应的数参与运算便可以了。


为了引出下面的内容,我换一种说法描述小方框里的方法。首先确定是项数,项,对吧。这项每项都有个数相乘,那么这个数怎么找呢?首先你要保证每行只挑一个,然后还要保证每列只挑一个。这怎么办呢?我们先从第一行挑起,第一行自然可以随便挑,有种,然后我们挑第二行,这时我们只要小心不在第一行挑过那列挑就可以了,有种挑法,依次类推。按理说,挑到第行时应该只剩一个可供选择的位置了。而且这种挑法一共有种,正好是对应项。最后确定符号,把你挑的元素的列指标排成一列,是奇排列的加一个负号,反之加一个正号。


你可能已经注意到了,保证每行只挑一个,每列只挑一个,还可以从列挑起,就是从第一列开始,每列挑的元素在不同行就可以了。写成式子就是



其实还有一种既不按行也不按列的混排法,不太实用,这里就不讲了。


行列式的性质


从刚才的例子展开方式就可以看出,按列展开和按行展开有很大相似性。所以,如果我们对行列式进行如下操作(叫做转置)



如果我们对第一个行列式按行指标成自然序展开(按行挑),第二个行列式按列列指标成自然序展开(按列挑),结果是一样的,因为我们进行的操作就是把原来的行指标当成列指标。也就是说,行列式转置前后数值相等。这个性质可是非常重要,它意味这转置前后的行列式我们只需要研究一个就可以了。


如此看来,研究行列式的性质可以减少计算行列式的过程,那我们何不再找一些性质来进一步简化计算。


还记得我们研究行列式的性质的目的是什么吗?为了研究方程组解的情况。那么我们应该研究一下用来解方程的初等行变换作用到行列式上会发生什么。


先把行列式的第行乘一个常数



按定义展开(看不懂公式的跳转到文字叙述部分)



提出公因数,得





用非公式语言来说就是,由于行列式展开需要保证每一项中的个元素分别取自不同行,所以每一项有且仅有一个行的元素,即每一项都有且仅有一个因子,把它提出来就得到了乘原行列式。


如果我们把行列式的两行互换



这里直接文字叙述。首先,两个行列式展开都有项,且这些项是对应相等的,所以我们只需要看符号的变化就可以了。先来看原行列式展开式中的一项,我们从第一挑起,一直挑到第列,我们假设,在挑到第列时我们挑的是第行的元素,在挑到第列时我们挑的是第行的元素。


接下来看变换后的行列式,我们需要找出与刚才那项相同的项。从第一列挑起,不过挑到第 列时,我们要找到元素变成了第行的元素;第列时同理。这样就导致了这项的行指标的排序和原来不同。那么是哪里不同呢?是换了位置。


接下来我们探究一下,一串数中的两个互换位置会对逆序数产生什么影响。先看两个数相邻的情况





这种操作记为。这种情况下,不管前面的数还是后面的数,与和与构成的逆序都没有变,只一数对会由顺序变为逆序或逆序变为顺序,所以逆序数会加一或减一。


然后我们来看一般的情况





这个过程需要经过



次相邻的对换,逆序数也会加上或减去一个奇数。


综上,对换会导致逆序数加上或减去一个奇数。带到行列式里,这样会导致这项符号改变。而行列式展开的所有项都会有这样的问题,合起来就是两行互换,行列式值变为原来的相反数。


那么我们很容易想到一种情形,如果行列式有两行相同,那么我们对换这两行。就会得到变换前和变换后的行列式互为相反数。另外,变换前后的行列式是相同的。也就是说,这个行列式的值等于它的相反数,这样的数只有0。总结一下,有两行相同的行列式的值等于0。


结合之前的性质,不难证明如果一个行列式有一行是另一行的常数倍,那么这个行列式等于0。


接下来看最后一种初等行变换,把一行的倍数加到另一行。



为了研究这种情况,我们首先要知道



等于什么。


先用公式证明(看不懂的去后面看文字叙述)



这里我假定在第


接下来是文字叙述的证明。由于行列式展开时要保证每行取而且只取一个,所以每一项都会有一个第行的元素,根据乘法分配律,可以把每一项都展开,然后含的放一起,含的放一起,可以想象,这正是我们刚才用公式推导出的两个行列式。


现在我们来解决之前提出的问题



用我们之前证过的性质可以推出,行列式值不变。


对行列式应用初等行变换会发生什么你已经知道了,不过不要忘了最开始我们的性质,对我们得到的性质求转置,我们得到对行成立的性质对列也成立。


克拉默(Cramer)法则


准备工作做完了,我们来探究一下元线性方程组的解的情况是不是真的和阶行列式有关。


首先考虑数域上的元线性方程组



把它的增广矩阵记为,系数矩阵(增广矩阵去掉最后一列)记为,增广矩阵化为简化行阶梯形矩阵记为,对应的系数矩阵记为。它们对应的行列式就是在矩阵边上加两道小竖线。


我们之前讨论过线性方程组解的三种情况和对应的增广矩阵化为简化行阶梯形矩阵的情况,现在我们以此为基础进行讨论。


如果线性方程组有唯一解,那么



所以



展开这个行列式,首先在第一行取一个,因为只要有一个乘数为零积就为零,所以第一行只有取第一个数才能使这项不为零。同样的第二行只能取第二个数。最后第行只能取第个数。判断一下符号,为正,所以行列式值等于1。


根据行列式的性质,对行列式做初等行变换只会使行列式的值变成常数倍。所以如果一个线性方程组有唯一解,那么它系数矩阵的行列式不等于零。


考虑另外两种情形,方程组无解,那么行,所以行。那么我们在展开时,每一项都要取这一行的元素,所以行列式值等于0。


方程组有无穷多解,方程数少于未知元数。我们需要用不影响解的零行把系数矩阵填成方阵。这样行列式有零行,值等于0。


所以行列式值等于零,方程组无解或有无穷多解。


综上,方程组有唯一解当且仅当方程组的系数矩阵的行列式值不为0。这就是克拉默法则。


Part3再探行列式


你以为行列式的内容结束了吗?当然不可能,行列式还有很多我们没有发现的美丽性质等着我们去挖掘。


行列式按一行(列)展开


观察行列式的展开过程就会发现,如果我们在第一行取一个元素,那么剩下的元素只能在划掉这个元素所在的行和列剩下的个元素中取,而且取法就是行列式的取法。于是,我们猜测,行列式可不可以写成元素和行列式乘积的和的形式。进一步的,想要凑齐行列式展开的所有项,必须是某一行的个元素分别乘上除了自己所在行和列的其他所有元素组成的新行列式。我们把除了自己所在行和列的其他所有元素组成的新行列式叫做该元素的余子式。


想法有了,我们来实操一下。我们把一个阶行列式按第行展开,第一项应该是



接下来判断一下这一项的符号,也就是我们要知道余子式每项的符号和这些项正常展开时的区别。想一想我们正常展开行列式时,符号是怎么判定的,当行指标呈自然序时求列指标序列的逆序数。我们先把的余子式按行指标呈自然序展开,求整个单项式列指标的逆序数。由于在最前面,所以列指标序列的逆序数相比于余子式没有变(毕竟1最小,放在前面和谁也不构成逆序),但是行指标不是自然序,想要行指标变成自然序,就要把第一个数对换成第个数。



这需要经过次对换(对换到1后面需要一次,类比可知对换到后面需要次)。同时,列指标也对换了次,这意味着正常展开时的符号是余子式符号变换次的结果。写成数学公式的完整形式是



OK,接下来我们研究一般的情况。行列式按一行展开的第项是



接下来判定一下符号。先打开的余子式,由于在最前面,所以这时列指标构成序列的逆序数是在余子式的逆序数上增加(因为有个数比小)。接下来把行指标变成自然序,需要对换次,这样列指标就对换了次。总之逆序数相比于余子式改变了。另外,所以第项的完整形式是



这时第一项的符号应该是,好像与我们之前讨论的特殊情况不太一样,但你仔细想想,这其实是相等的。


综上,行列式按一行展开的公式应该是(不喜欢看公式可以跳过,不影响阅读)



其中



叫做的代数余子式。


应用行列式转置的性质,不难得出行列式按一列展开的公式。


克拉默公式


还记得我们解过的二元线性方程组吗



用Gauss消元法解方程。得到




所以我们猜测,元线性方程组的唯一解是,其中是系数矩阵,是把系数矩阵第列替换成增广矩阵的最后一列的系数矩阵。


这里需要补充一个定理。行列式按一行展开时是某一行元素乘对应的代数余子式。如果我们不乘对应的会怎么样呢?


考虑一个行列式



我们用第行的元素乘第行的代数余子式。这样就和



的展开式一样了(可以自己试试)。而这个行列式值等于0,所以行列式某一行的元素乘另外一行的元素的代数余子式的和等于0。对列也有同样的性质。


回归主题,把我们猜的解代入方程组





提公因式得到



按第列(之前我们替换掉那列)展开



这里的代表的是代数余子式(区分于行列式,所以没加竖线),角标代表是哪个元素的代数余子式。


打开后重新提取公因式



这时,注意到从里面的括号里的是第行的元素乘各行的代数余子式,因为只有乘第行的代数余子式才不等于0.所以从外面的括号里的变成了



所以



得证。




行列式还有很多应用,比如求三棱柱的体积,等等。这里不详述了。


拉普拉斯(Laplace)定理


之前我们把行列式的一行单独提出来,这次我们考虑能不能把行列式的行提出来。


例如,我们先看行列式的第行。从第行开始取,有种取法;第行有种取法;一直到第行,有种取法,一共种取法。这里包括了个列的组合和每个列的组合中的种取法。这时你应该能看出来,种种取法就对应了一个阶行列式,这个阶行列式我们把它叫做阶子式。


接下来考虑在剩下的行中取,我们把这行命名为第行。首先,当我们取定一个阶子式后,子式占用的行和列就不能再取元素了,这样我们只剩下了个元素可以取。另外,在这个元素的取法也和行列式一样。我们把这个行列式叫做阶子式的余子式。


这样,阶子式和余子式就把1~行和1~列取遍了,所以行列式的展开应该具有阶子式和余子式相乘的形式。


接下来就是判断符号,我们先任取一个阶子式和它的余子式相乘



我们先把两个行列式分别按行指标成自然序展开,并任取一项进行研究



~~的一种排列方式,~~的一种排列方式。


现在他的符号是


我们要看看它和正常展开时,即行指标成自然序时列指标的逆序数差了多少,即



中的是行列式正常展开的符号,即行指标成自然序时列指标的逆序数)


可以通过对换来实现(类比行列式按一行展开)。但是对换是针对一个序列进行的,所以对换之前,我们要把两个序列合并。


合并为,这时逆序数增加了在中比小的部分,由于的一种排列方式,所以我们可以看中比小的部分。中比小的有个(因为1~都在中)。中比小的有个(因为1~只有不在中)。同理,中比小的有个。


所以合并使逆序数改变了


化简得到


所以我们要求的变成了。现在来求


接下来把阶子式和余子式的乘积的展开式的行指标变成自然序。即



这里会比较烧脑,读者不妨拿起笔和纸和我一起操作。


首先回忆一下,是把抽出行后得到的,也就是说,是两组从小到大排列的序列。


所以,把移到中的一个数)后面需要先跨过(对换了次),然后再对换次到后面。以此类推,把对换到目标位置需要先对换次,再对换次。最后,把对换到后面需要对换次。一共对换了



同时列指标也对换了次。


综上,我们得到在子式和余子式相乘的结果的符号先变化
次,再变化
次便可得到了该项实际上的符号。


相加并化简得到


略去不影响系数的便得到行列式按行展开的一项的完整形式应该是



另外,我们可以把阶子式记为



是原行列式的符号(没有竖线),括号里是子式在原行列式的行指标和列指标。


所以行列式按行展开的公式就是



如果你看不懂公式,他的文字叙述就是在行列式中任取行,这个行列式的值等于它的所有由这行生成的阶子式和它的代数余子式(带符号的余子式)乘积之和。这就是拉普拉斯定理。


应用转置的性质,还可以得到行列式按列展开的公式。


收起阅读 »

排列组合到底是什么

从早上起床开始,我们的大脑就需要不停的决策,穿什么衣服,配什么裤子。有一天,无聊的数学家开始思考,到底我们是在多少情况中选择了一种呢? Part1两种原理 假想一下,准备出门的你有三件衣服,两条裤子,那么你出门前最多有多少种搭配方式呢? 加法原理 首先...
继续阅读 »

从早上起床开始,我们的大脑就需要不停的决策,穿什么衣服,配什么裤子。有一天,无聊的数学家开始思考,到底我们是在多少情况中选择了一种呢?


Part1两种原理


假想一下,准备出门的你有三件衣服,两条裤子,那么你出门前最多有多少种搭配方式呢?


加法原理


首先,先找一条裤子,有几种情况?你可能脱口而出,两种。但是,我们不妨先慢一点,想一想这个数字你是怎么得到的。其实,我们的思考过程应该是这样的,我们可以穿第一条或第二条。


接下来再问你选择衣服的可能,你一定会毫不费力地说出三这个数字。


这便是加法原理,它告诉我们如果解决一个问题有若干种方法,那么我们只需要把每种方法的方案数相加。


乘法原理


衣服有三种可能,裤子有两种可能。你能知道一共多少种可能吗?


先别着急,仔细想一想,衣服的三种可能是对应每条裤子有三种可能。所以按照刚才我们得出的结论,所有的可能应该是种。现在,我们用乘法来简化这个加法,即我们把第一次得到的2与第二次得到的3相乘即可得到结果。


这便是乘法原理,它告诉我们当解决一个问题需要分步时,就要把每步的方案数相乘。




总结一下,如果我们完成一个问题有若干步,我们就要把每步的方案数乘起来。而每步的方案数,我们是把所有可能相加得到的。


Part2排列问题


我们接下来研究一个复杂一点的问题:排序问题。或者用数学家的话说:排列问题。


全排列


我们先来看一个简单一点的问题:个不同的人站成一排,有多少种站法。


用我们刚才得到的两个原理来思考。这个问题有步,即排第一个人,第二个人个人。排第一个人有种选择,排第二个人有种选择,以此类推,排第个人就只有一种可能。所以一共应该有种可能。


如果我们引入一个新的运算:的阶乘=。我们就可以把这个问题的答案写作


一般的排列问题


我们来进一步思考,如果有个人,我们要从中挑出个人排成一列,有多少种排法?


仿照刚才的过程,我们不难想到这个问题有步,即排第一个人,第二个人个人。排第一个人有种选择,排第二个人有种选择。以此类推,排第个人就有种可能,这个结果可能有些难想,这里我交给大家一种方法,叫难题不会,做简单的,通过观察我们发现,排第一个人有种选择,排第二个人有种选择,每个人的序号加上对应的选择数应该等于,所以第个人就有种可能。


综上,一共应该有种可能。应用刚才的符号可以简写为




最后,我们将从个元素种选再排序这类问题总结成一个公式



特别地,全排列公式



Part3组合问题


推导完一般情况的排列数公式,我们不禁想问:如果我们不需要知道顺序,只需要知道个元素种选个应该有多少种选法?


想解决这个问题我们不妨重新思考一下全排列公式。从个元素种选再排序这个描述中就有一个分步过程,其中前半段正是我们要的结果,换言之,可以写成组合数公式与种元素的全排列相乘的结果,即





还记得我开头说的话吗?这些都是“无聊”的数学家搞出来的东西。是啊,这些东西有什么用呢?但正是这种无聊,为更美丽的风景铺平了道路。


收起阅读 »

一道数列极限的例题

数列极限的定义是 对于任意正数(无论它多小),总可以找到序号,使得当时,恒成立。这时称数列的极限为。记作 要点 直觉上看,极限是无限接近的意思,换言之,就是要多接近有多接近。而这个定义就是给这句话翻译成了数学语言。 首先要明白一点,这个定义...
继续阅读 »

数列极限的定义是



对于任意正数(无论它多小),总可以找到序号,使得当时,恒成立。这时称数列的极限为。记作



要点


直觉上看,极限是无限接近的意思,换言之,就是要多接近有多接近。而这个定义就是给这句话翻译成了数学语言。


首先要明白一点,这个定义只能证明极限,而不能求解。这意味着我们需要先猜出一个,再证明。


假设我们已经猜出一个,我们保证在序号变大时的值越来越接近,并且满足要多接近有多接近,我们需要用(表示的距离)来衡量。


要多小有多小就是在一定条件下可以小于任意给定的正常数


那么这个一定条件是什么呢?由于我们要找的是序号趋近无穷大时的极限,我们就应该让序号在比一个数大的情况下都能满足恒成立。


也就是说我们每给出一个都得找到一个,而我们怎么才能使任给的一个都能找到呢?是无穷无尽的,穷举是不可能的,我们应该考虑能不能找到一个关于的式子,每出现一个时,代入便可找到


接下来我通过一道例题来说明这些要点。


例题




求证:数列极限是0




首先,求出,即



想让它小于任给的正数,就是先解一下这个方程



(注意此时已给定)
解出来的可能不是一个整数,我们只需要它的整数部分(用进一法取),比如1.12我们取2作为的值。由于这个数列是递减的,所以这个一定是满足时,恒成立。


这样我们就得到了给定一个的方法,这样就满足了对所有都找到一个


即证。




收起阅读 »

用Python数值求解偏微分方程

作者|yubr编辑|TraderJoe's1 引言微分方程是描述一个系统的状态随时间和空间演化的最基本的数学工具之一,其在物理、经济、工程、社会等各方面都有及其重要的应用。然而,只有很少的微分方程可以解析求解,尤其对于偏微分方程,能解析求解的种类更是寥寥可数。...
继续阅读 »



作者|yubr

编辑|TraderJoe's

1 引言

微分方程是描述一个系统的状态随时间和空间演化的最基本的数学工具之一,其在物理、经济、工程、社会等各方面都有及其重要的应用。

然而,只有很少的微分方程可以解析求解,尤其对于偏微分方程,能解析求解的种类更是寥寥可数。更多的微分方程可以采用数值法进行求解,只要精度足够高,就可以满足科学和工程上的需求。

数值求解微分方程的基本思路是先把时间和空间离散化,然后将微分化为差分,建立递推关系,然后利用计算机强大的重复计算能力,快速得到任意格点处的值。

Python的Numpy、Scipy工具包可以很好地实现此功能,Matplotlib工具包则可以将求解结果画为非常直观的图形。接下来,我们先以常微分方程的数值求解为例,引入差分的思想,再将其推广到偏微分方程中。

2 常微分方程的差分求解

一般地,一阶常微分方程可以写为



首先,将连续的变量  和  离散化,连续的函数  和  化为离散的序列  和 ,则上述微分方程可以化为差分方程



从而我们得到递推关系



有了递推关系初始条件以后,就可以利用 Python 的强大计算功能,得到任意的  的值了,下面我们通过一个具体的例子来说明。

2.1 RC回路放电问题

对于一个  回路,我们有



其中, 分别为电流,电阻,电量和电容,利用 ,并定义 ,我们得到一个含初始条件的一阶常微分方程



这个方程当然可以解析求解,得到

我们现在尝试用上述差分法来求解数值解,并与解析结果进行比较。按照差分法,可以得到递推关系



下面我们用 Python 进行数值求解

import numpy as np
import matplotlib.pyplot as plt
rc = 2.0 #设置常数
dt = 0.5 #设置步长
n = 1000 #设置分割段数
t = 0.0 #设置初始时间
q = 1.0 #设置初始电量

#先定义三个空列表
qt=[] #用来盛放差分得到的q值
qt0=[] #用来盛放解析得到的q值
time = [] #用来盛放时间值

for i in range(n):
    t = t + dt
    q1 = q - q*dt/rc #qn+1的近似值
    q = q - 0.5*(q1*dt/rc + q*dt/rc) #差分递推关系
    q0 = np.exp(-t/rc) #解析关系
    qt.append(q) #差分得到的q值列表
    qt0.append(q0) #解析得到的q值列表
    time.append(t) #时间列表

plt.plot(time,qt,'o',label='Euler-Modify'#差分得到的电量随时间的变化
plt.plot(time,qt0,'',label='Analytical'#解析得到的电量随时间的变化
plt.xlabel('time')
plt.ylabel('charge')
plt.xlim(0,20)
plt.ylim(-0.2,1.0)
plt.legend(loc='upper right')
plt.show()

图片

用改进的欧拉法差分得到的结果和解析结果的比较


上图给出了差分法得到的结果与解析法得到结果的比较,发现两者符合得很好,这说明对于这个问题,改进的欧拉法已经可以给出足够精确的结果。

需要注意的是,这个微分方程本身比较简单,可以解析求解,而对于复杂得多的微分方程,没法解析求解,但是上述数值求解差分方法仍然是适用的。

3 偏微分方程的差分求解

有了差分代替微分的思想,接下来我们将其推广到偏微分方程的求解中。以一般二阶抛物型偏微分方程为例,一般的可以写为



仍然是将时间和空间离散化,将微分化为差分,即



其中  和  分别为空间步长和时间步长, 和  分别标记空间指标和时间指标,则我们得到差分方程



由此得到递推关系



下面我们考察一个具体的例子,一维热传导方程的求解。

3.1 一维热传导方程的求解

一维热传导方程是一个典型的抛物型二阶偏微分方程。设  表示在时间 ,空间  处的温度,则根据傅里叶定律(单位时间内流经单位面积的热量和该处温度的负梯度成正比),可以导出热传导方程



其中  称为热扩散率, 分别为热导率,比热和质量密度,都是由系统本身确定的常量。

为了具体,设 ,设边界条件为



设步长为:,从而 ,所以递推关系为



图片

递推关系示意图


上图直观地给出了差分法求解偏微分方程的过程。先把时空坐标都离散化,根据递推关系,由下一行的三个蓝点的值可以给出上一行的一个红点的值,由于边界条件和初始条件(即最下方和两边的绿线)已知,所以按这个递推关系可以得到网格中的所有值。下面我们用 Python 代码来实现。

import numpy as np
import matplotlib.pyplot as plt

h = 0.1#空间步长
N =30#空间步数
dt = 0.0001#时间步长
M = 10000#时间的步数
A = dt/(h**2#lambda*tau/h^2
U = zeros([N+1,M+1])#建立二维空数组
Space = arange(0,(N+1)*h,h)#建立空间等差数列,从0到3,公差是h

#边界条件
for k in arange(0,M+1):
    U[0,k] = 0.0
    U[N,k] = 0.0

#初始条件
for i in arange(0,N):
    U[i,0]=4*i*h*(3-i*h)

#递推关系
for k in arange(0,M):
    for i in arange(1,N):
        U[i,k+1]=A*U[i+1,k]+(1-2*A)*U[i,k]+A*U[i-1,k]

上述代码中,我们首先把位于0-3中的空间等分为30份,位于0-1的时间等分为10000份,然后通过设置初始条件、边界条件和递推关系并借助for循环就得到了1个30*10000的二维数组,里面放着每个离散的时空点的温度值。

为了直观地展现温度随时空的变化关系,接下来开始画图,首先画出不同时刻温度随空间坐标的变化

#不同时刻的温度随空间坐标的变化
plt.plot(Space,U[:,0], '', label='t=0',linewidth=1.0)
plt.plot(Space,U[:,3000], '', label='t=3/10',linewidth=1.0)
plt.plot(Space,U[:,6000], '', label='t=6/10',linewidth=1.0)
plt.plot(Space,U[:,9000], '', label='t=9/10',linewidth=1.0)
plt.plot(Space,U[:,10000], '', label='t=1',linewidth=1.0)
plt.ylabel('u(x,t)', fontsize=20)
plt.xlabel('x', fontsize=20)
plt.xlim(0,3)
plt.ylim(-2,10)
plt.legend(loc='upper right')
plt.show()

图片

不同时刻的温度随空间坐标的变化


从图中可以看到,温度关于  呈现轴对称分布,这是由初始条件造成的。另外,对每一点的空间坐标,随着时间的推移,温度越来越低。

接下来,我们来画出温度等高线来描述温度随任意时空点的变化

#温度等高线随时空坐标的变化,温度越高,颜色越偏红
extent = [0,1,0,3]#时间和空间的取值范围
levels = arange(0,10,0.1)#温度等高线的变化范围0-10,变化间隔为0.1
plt.contourf(U,levels,origin='lower',extent=extent,cmap=plt.cm.jet)
plt.ylabel('x', fontsize=20)
plt.xlabel('t', fontsize=20)
plt.show()

图片

温度随时空坐标的变化,温度越高,颜色越红


我们利用颜色的深浅来标记温度,温度越高,颜色越红。从中同样可以看到,温度随空间的分布关于  轴对称,而且随着时间的推移,温度越来越低。

4 总结

在本文中,我们利用Python数值求解了常微分方程和偏微分方程,基本思想是先将连续的坐标离散化,然后将微分化为差分,由差分方程得到递推关系,然后利用计算机强大的重复计算能力得到任意格点处的函数值。

虽然上面只算了两个例子,但是这种方法完全可以推广到任意偏微分方程的求解中。

量子色动力学(QCD)中,由于强相互作用具有渐进自由的特性,所以在低能情况下没办法像QED那样使用微扰论计算,这时就要采用格点QCD的方法计算。

其基本思想也是将时空离散化,然后从第一性原理的路径积分出发去计算。

由于时空被离散化了,相当于人为地引入了一个最小时空距离 ,在傅里叶变换到动量空间后相当于引入了一个最大的动量截断 ,所以计算结果不会出现紫外发散,从而可以算到很高的精度,在一些情况下,格点的计算结果甚至比实验更精确。

所以,将连续参数离散化,把微分化为差分的思想,是极其重要的。




附录



  1. 不同的算法对于方程右边具体取什么形式并不一样,从而精度也不一样。例如,欧拉法右边取得是 ;改进的欧拉法右边取的是 ;二阶Runge-Kutta法右边取的是 ;四阶Runge-Kutta法右边取的是 ,其中 , 。这些算法的差别在于计算精度不同,并不改变差分的本质思想。为了具体,我们这里采用改进的欧拉法。
  2. 傅里叶定律告诉我们单位时间通过单位面积的热量和该处的温度负梯度成正比,即 ,其中  是热流,即单位时间通过单位面积的热量, 为热导率, 为温度。能量守恒定律告诉我们单位时间流出某闭合曲面的热量等于其内部减少的能量,即 ,其中  表示单位体积的热容,而  与  分别为质量密度和单位质量的热容(比热),联合散度定理 ,我们得到 ,再将傅立叶定律带入,就得到了热传导方程 ,其中  称为热扩散率。在一维的情况下,热传导方程就退化到了正文中的形式,即 




收起阅读 »