IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 浅谈三对角线性方程组的解法 -> 正文阅读

[数据结构与算法]浅谈三对角线性方程组的解法

?背景

????????作为一名非数学专业本科生。在大一大二学习了高等数学、线性代数等课程,对微分方程的数值求解等问题有了一些初步的认识。在本学期开设的计算机辅助几何技术基础中,我们学习了样条曲线、Bezier曲线、B样条曲线等知识。我发现许多式子的求解都会转化为三对角线性方程组的求解。故本篇文章就是我对于该问题的解决方法的一些整理,以及在我们的专业课程——CAGD中的应用,并谈谈自己的理解。

? ? ? ? 为何要探讨这个问题,源于我们CAGD课程老师云笔记中的一个B样条曲线的例题:

????????这让我想起了我们好像不止一次遇到过三对角线性方程组的问题。所以就有了这篇文章的由来。(其实我只是个搬运工)

?

三对角线性方程组(tridiagonal systems of equations)? ? ?

????????三对角线性方程组可描述为以下方程组:?

a_{i}x_{i-1}+b_{i}x_{i}+c_{i}x_{i+1} = d_{i}

?????????其中1\leq i\leq n,a_{1}=0,c_{n}=0?,以上方程组写成矩阵形式为Ax = b,即:

?????????三对角线性方程组的求解采用追赶法或者Thomas算法,它是Gauss消去法在三对角线性方程组这种特殊情形下的应用,因此,主要思想还是Gauss消去法,只是会更加简单些。我们将在下面的算法详述中给出该算法的具体求解过程。?

? ? ? ? 我们平时接触的最多的方法应该也就是追赶法了,该算法对于部分系数矩阵A是可以求解的。所以以下先给出追赶法的实现方法。

算法详述

????????追赶法或者Thomas算法的具体步骤如下:

1、创建新系数c_{i}^{*}d_{i}^{*}来代替原来的a_{i},b_{i},c_{i},公式如下:

c_{i}^{*}=\left\{\begin{matrix} \frac{c_{1}}{b_{1}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ;i = 1\\ \frac{c_{i}}{b_{i}-a_{i}c_{i-1}^{*}};i = 2,3,...,n-1 \end{matrix}\right.

d_{i}^{*}=\left\{\begin{matrix} \frac{d_{1}}{b_{1}}\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ;i = 1\\ \frac{d_{i}-a_{i}d_{i-1}^{*}}{b_{i}-a_{i}c_{i-1}^{*}};i = 2,3,...,n-1 \end{matrix}\right.

2、改写原先的方程组Ax = b如下:

(ps:小白实在不会打latex的矩阵了呜呜,在学了!)

?3、计算解向量x,如下:

x_{n} = d_{n}^{*},x_{i} = d_{i}^{*}-c_{i}^{*}x_{i+1}, i = n-1,n-2,...,2,1

????????以上算法得到的解向量x即为原方程Ax=b的解。

????????下面,我们来证明该算法的正确性,只需要证明该算法保持原方程组的形式不变。?
????????首先,当i = 1时,?

1 \ast x_{1}+c_{1}^{*} x_{2} = d_{*}^{1}\Leftrightarrow 1\ast x_{1}+\frac{c_{1}}{b_{1}}x_{2} = \frac{d_{1}}{b_{1}}\Leftrightarrow b_{1}\ast x_{1}+c_{1}x_{2} = d_{1}

? ? ? ? 当i>1时,

1 \ast x_{i}+c_{1}^{*} x_{2} = d_{*}^{1}\Leftrightarrow 1\ast x_{i}+\frac{c_{i}}{b_{i}-a_{i}c_{i-1}^{*}}x_{i+1} = \frac{d_{i}-a_{i}d_{i-1}^{*}}{b_{i}-a_{i}c_{i-1}^{*}}\Leftrightarrow (b_{i}-a_{i}c_{i-1}^{*})x_{i}+c_{i}x_{i+1} = d_{i}-a_{i}d_{i-1}^{*}

结合a_{i}x_{i-1}+b_{i}x_{i}+c_{i}x_{i+1} = d_{i},只需要证明x_{i-1}+c_{i-1}^{*}x_{i} = d_{i-1}^{*},而这已经在算法的第(3)步计算x_{i-1}中给出,故证明完毕。

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

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:18:39  更:2021-12-10 11:19:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/10 3:06:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码