背景
作为一名非数学专业本科生。在大一大二学习了高等数学、线性代数等课程,对微分方程的数值求解等问题有了一些初步的认识。在本学期开设的计算机辅助几何技术基础中,我们学习了样条曲线、Bezier曲线、B样条曲线等知识。我发现许多式子的求解都会转化为三对角线性方程组的求解。故本篇文章就是我对于该问题的解决方法的一些整理,以及在我们的专业课程——CAGD中的应用,并谈谈自己的理解。
为何要探讨这个问题,源于我们CAGD课程老师云笔记中的一个B样条曲线的例题:
这让我想起了我们好像不止一次遇到过三对角线性方程组的问题。所以就有了这篇文章的由来。(其实我只是个搬运工)
三对角线性方程组(tridiagonal systems of equations)
三对角线性方程组可描述为以下方程组:
其中 ,以上方程组写成矩阵形式为
,即:
三对角线性方程组的求解采用追赶法或者Thomas算法,它是Gauss消去法在三对角线性方程组这种特殊情形下的应用,因此,主要思想还是Gauss消去法,只是会更加简单些。我们将在下面的算法详述中给出该算法的具体求解过程。
我们平时接触的最多的方法应该也就是追赶法了,该算法对于部分系数矩阵A是可以求解的。所以以下先给出追赶法的实现方法。
算法详述
追赶法或者Thomas算法的具体步骤如下:
1、创建新系数和
来代替原来的
,公式如下:
2、改写原先的方程组如下:
(ps:小白实在不会打latex的矩阵了呜呜,在学了!)
3、计算解向量,如下:
以上算法得到的解向量x即为原方程的解。
下面,我们来证明该算法的正确性,只需要证明该算法保持原方程组的形式不变。
首先,当时,
当时,
结合,只需要证明
,而这已经在算法的第(3)步计算
中给出,故证明完毕。
Python实现
见三对角线性方程组(tridiagonal systems of equations)的求解_山阴少年-CSDN博客_三对角方程组
个人小结
事实上,Matlab的强大功能已经赋予我们解决任何矩阵问题的能力(毕竟是Matrix Laboratory)。在我们解决实际问题的时候,我们会因为有了许多强大的工具软件之后减少了对许多问题的思考。而在我看来,勤于思考,敢于深入研究问题,我们才能学的更多更好!
参考文献
1、三对角线性方程组(tridiagonal systems of equations)的求解_山阴少年-CSDN博客_三对角方程组
2、(这个是我老师的云笔记的一道例题)https://note.youdao.com/ynoteshare/index.html?id=cd95875775b4496be166eb077a70a0b0&type=note&_time=1639060051484