解线性方程组——追赶法解三对角方程组 | 北太天元

一、问题描述

对于线性方程组
A x = b , A = ( b 1 c 1 a 2 b 2 c 2 ⋱ ⋱ ⋱ ⋱ ⋱ ⋱ a n − 1 b n − 1 c n − 1 a n b n ) , b = ( f 1 f 2 ⋮ f n ) Ax=b,\quad A=\begin{pmatrix}b_1&c_1&&&&\\a_2&b_2&c_2&&&\\&\ddots&\ddots&\ddots&& \\&&\ddots&\ddots&\ddots& \\&&&a_{n-1}&b_{n-1}&c_{n-1}\\&&&&a_n&b_n\end{pmatrix},\quad b=\begin{pmatrix} f_1\\f_2\\ \vdots\\ f_n \end{pmatrix} Ax=b,A= b1a2c1b2c2an1bn1ancn1bn ,b= f1f2fn

其中
{ ∣ b 1 ∣ > ∣ c 1 ∣ > 0 ∣ b n ∣ > ∣ a n ∣ > 0 ∣ b i ∣ ≥ ∣ a i ∣ + ∣ c i ∣ , a i c i ≠ 0 , i = 2 , 3 , ⋯ n − 1 \begin{cases} \begin{aligned}&\quad|b_1|>|c_1|>0\\&\quad|b_n|>|a_n|>0\\&\quad|b_i|\geq|a_i|+|c_i|,\quad a_ic_i\neq0,i=2,3,\cdots n-1\end{aligned} \end{cases} b1>c1>0bn>an>0biai+ci,aici=0,i=2,3,n1

二、追赶法解三对角方程组

A = ( b 1 c 1 a 2 b 2 c 2 ⋱ ⋱ ⋱ a n − 1 b n − 1 c n − 1 a n b n ) , L = ( 1 l 2 1 l 3 ⋱ ⋱ 1 l n 1 ) , U = ( u 1 d 1 u 2 d 2 ⋱ ⋱ u n − 1 d n − 1 u n ) \begin{equation*} A=\begin{pmatrix}b_1&c_1\\a_2&b_2&c_2\\&\ddots&\ddots&\ddots\\&&a_{n-1}&b_{n-1}&c_{n-1}\\&&&a_n&b_n\end{pmatrix}, {L}=\begin{pmatrix}1\\l_2&1\\&l_3&\ddots\\&&\ddots&1\\&&&l_n&1\end{pmatrix},{U}=\begin{pmatrix}u_1&d_1\\&u_2&d_2\\&&\ddots&\ddots\\&&&u_{n-1}&d_{n-1}\\&&&&u_n\end{pmatrix} \end{equation*} A= b1a2c1b2c2an1bn1ancn1bn ,L= 1l21l31ln1 ,U= u1d1u2d2un1dn1un

A = L U A = LU A=LU

首先通过前两行与前两列可以知道
b 1 = u 1 , a 2 = l 2 u 1 , c 1 = d 1 b_1=u_1,a_2 = l_2u_1,c_1 = d_1 b1=u1,a2=l2u1,c1=d1 u 1 , d 1 , l 2 u_1,d_1,l_2 u1,d1,l2

再从下式看两边是如何对应上的

A : i − 1 i i + 1 i a i b i c i A:\begin{array}{c|c|c|c} & i-1 &i&i+1\\ \hline i&a_i&b_i&c_i \end{array} A:ii1aiibii+1ci

L : i − 1 i i + 1 i l i 1 U : i − 1 i i + 1 i − 2 d i − 2 i − 1 u i − 1 d i − 1 i u i d i i + 1 u i + 1 L:\begin{array}{c|c|c|c} & i-1 &i&i+1\\ \hline i&l_i&1& \end{array} \quad U:\begin{array}{c|c|c|c} & i-1 &i&i+1\\ \hline i-2&d_{i-2}& &\\ \hline i-1&u_{i-1}&d_{i-1}&\\\hline i& & u_i&d_i\\\hline i+1 & & &u_{i+1} \end{array} L:ii1lii1i+1U:i2i1ii+1i1di2ui1idi1uii+1diui+1

可以看出
a i = l i u i − 1 b i = l i d i − 1 + u i c i = d i \begin{aligned} &a_i = l_i u_{i-1}\\ &b_i = l_i d_{i-1} +u_i\\ &c_i = d_i \end{aligned} ai=liui1bi=lidi1+uici=di

d i d_i di已经得出,接下来只需算 l i l_i li u i u_i ui 即可

再有 u 1 = b 1 u_1 = b_1 u1=b1, i = 2 → n i = 2 \to n i=2n

l i = a i u i − 1 u i = b i − l i ⋅ c i − 1 \begin{gathered} l_i = \dfrac{a_i}{u_{i-1}}\\ u_i = b_i - l_i \cdot c_{i-1} \end{gathered} li=ui1aiui=bilici1

这样子, L L L U U U就得到了

接下来,解 L y = b Ly = b Ly=b , U x = y Ux = y Ux=y,这一步可以用之前写好的程序直接解出

由于这里,结果比较简易,直接将结果写了出来:

L y = b Ly = b Ly=b: (追)
( 1 l 2 1 l 3 ⋱ ⋱ 1 l n 1 ) ( y 1 y 2 ⋮ y n − 1 y n ) = ( f 1 f 2 ⋮ f n − 1 f n ) \left.\begin{pmatrix}1\\l_2&1\\&l_3&\ddots\\&&\ddots&1\\&&&l_n&1\end{pmatrix}\left(\begin{array}{c}y_1\\y_2\\\vdots\\y_{n-1}\\y_n\end{array}\right.\right)=\left(\begin{array}{c}f_1\\f_2\\\vdots\\f_{n-1}\\f_n\end{array}\right) 1l21l31ln1 y1y2yn1yn = f1f2fn1fn
y 1 = f 1 , y i = f i − l i ⋅ y i − 1 ( i = 2 , 3 ⋯ n ) y_1 = f_1,y_i = f_i - l_i \cdot y_{i-1} (i=2,3\cdots n) y1=f1,yi=filiyi1(i=2,3n)

U x = y Ux = y Ux=y:(赶)
( u 1 d 1 u 2 d 2 ⋱ ⋱ u n − 1 d n − 1 u n ) ( x 1 x 2 ⋮ x n − 1 x n ) = ( y 1 y 2 ⋮ y n − 1 y n ) \left.\begin{pmatrix}u_1&d_1&&&\\&u_2&d_2&&\\&&\ddots&\ddots&\\&&&u_{n-1}&d_{n-1}\\&&&&u_n\end{pmatrix}\left(\begin{array}{c}x_1\\x_2\\\vdots\\x_{n-1}\\x_n\end{array}\right.\right)=\left(\begin{array}{c}y_1\\y_2\\\vdots\\y_{n-1}\\y_n\end{array}\right) u1d1u2d2un1dn1un x1x2xn1xn = y1y2yn1yn
x n = y n u n , x i = ( y i − d i ⋅ x i + 1 ) u i ( i = n − 1 , ⋯ , 2 , 1 ) x_n = \dfrac{y_n}{u_n}, x_i = \dfrac{(y_i-d_i\cdot x_{i+1})}{u_i}(i=n-1 ,\cdots,2, 1) xn=unyn,xi=ui(yidixi+1)(i=n1,,2,1)

这样 x x x 就求出来了

三、算法

在这里插入图片描述

四、北太天元源代码

function [x]=tridiag_chase(A,f)% 追赶法解三对角方程组% 输入:  适用的三对角矩阵A,  右端向量f% 输出:  解,列向量的形式 x% 创建时间: 1/26/2024% 版本: 1.0n = length(A);% 将三对角提取出来b = diag(A,0); a = diag(A,-1); c = diag(A,1);% 处理一下角标 a是从a_2开始, l从l_2 开始a = cat(1,[0],a); % a = [0, diag(A,-1)]u = zeros(1,n);l = zeros(1,n);u(1) = b(1);for i = 2:1:nl(i) = a(i)/u(i-1);u(i) = b(i)-l(i)*c(i-1);end% Ly = by = zeros(1,n);y(1) = f(1);for i =2:1:ny(i) = f(i)-l(i)*y(i-1);end% Ux= yx = zeros(n,1);x(n) = y(n)/u(n);for i =n-1:-1:1x(i) = (y(i) - c(i)* x(i+1))/u(i);end
end

保存为 tridiag_chase.m 文件

简单测试一下

在 10、100、500 、1000阶 三对角方程组下, 追赶法与gauss列主元消去法 的时间消耗对比

% file need: tridiag_chase.m,  gsem_column.m
% time: 1/26/2024
%%
clc,clear all;
n = 10;  % 方程组的阶数 10 100 500 1000
A = diag(2*ones(n,1)) + diag(-1*ones(n-1,1),1) + diag(-1*ones(n-1,1),-1);
f = (1:n)';
t1 = tic;
x1 = tridiag_chase(A,f);
toc(t1);t2 = tic;
x2 = gsem_column(A,f);
toc(t2);delta = norm(abs(x1-x2));
n追赶法Gauss列主元delta
100.242069 s0.253921 s0
1000.249970 s0.997883 s0
5000.373002 s19.068616 s0
10000.440046 s81.370982 s0

随着方程组阶数的增大、其优势愈加明显。

其中用到的 Gauss列主元消去法 ,见左方蓝色字体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/1697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7安装、卸载MySQL数据库(一)

说明:本文介绍如何在CentOS 7操作系统下使用yum方式安装MySQL数据库,及卸载; 安装 Step1:卸载mariadb 敲下面的命令,查看系统mariadb软件包 rpm -qa|grep mariadb跳出mariadb软件包信息后,敲下面的命令…

mysql基础14——视图

视图 视图是一种虚拟表 可以把一段查询语句作为视图存储在数据库中 需要的时候把视图看作一个表,对里面的数据进行查询 视图并没有真正存储数据 避免了数据存储过程中可能产生的冗余 提高了存储的效率 子查询 嵌套在另一个查询中的查询 派生表 如果在查询中…

六、项目发布 -- 4. 电子书详情页API开发、电子书列表API开发

电子书详情页API的编写 同理如下app.get中路由、回调;回调中要连接数据库、接收前端传过来的值、到数据库中做查询,然后回调(如果回调失败返回什么JSON,如果回调成功返回什么JSON);最后千万别忘记了关闭数…

怎样快速打造二级分销小程序

乔拓云是一个专门开发小程序模板的平台,致力于帮助商家快速上线自己的小程序。通过套用乔拓云提供的精美模板,商家无需具备专业的技术背景,也能轻松打造出功能齐全、美观大方的小程序。 在乔拓云的官网,商家可以免费注册账号并登录…

全科都收!1区毕业水刊,影响因子狂涨至9.8,无预警记录!国人评价高!

本期,小编给大家解析的是一本创刊于2014年,且于同年被WOS数据库收录的毕业“水刊”——SCIENTIFIC DATA。 截图来源:期刊官网 SCIENTIFIC DATA(ISSN:2052-4463)是一本致力于数据的开放获取期刊&#xff0c…

可视化大屏在政务领域应用非常普遍,带你看看

可视化大屏在政务领域的应用非常普遍,政务领域需要处理大量的数据和信息,通过可视化大屏可以将这些数据以直观、易懂的方式展示出来,帮助政府决策者和工作人员更好地了解和分析数据,从而做出更准确、科学的决策。 在政务领域&…

xhEditor实现WORD粘贴图片自动上传

1.下载示例: 从官网下载 http://www.ncmem.com/webapp/wordpaster/versions.aspx 从gitee中下载 https://gitee.com/xproer/wordpaster-php-xheditor1x 2.将插件目录复制到项目中 3.引入插件文件 定义插件图标 初始化插件,在工具栏中添加插件按钮 效果…

B端界面:除了蓝色外,四条搞定清新明快的界面设计。

一、什么是清新明快风格 清新明快的设计风格是指在B端系统中使用明亮、清淡的色彩、简洁的布局和自然元素,以及轻快的动效,营造出轻松、愉悦的界面氛围。 二、哪些行业适用 这种设计风格适用于多个行业,特别是那些与创意、娱乐、健康、旅游…

安卓原生项目工程结构说明

.gradle 和 .idea (自动生成) .gradle 是gradle下载好的缓存,如果有配置好的 下载好的缓存 直接会拿来用 没有会下载 生成 .idea 是编辑器的配置 app 代码主逻辑 目录 项目中的代码 资源都会在里面 工作的时候的核心目录 gradle 下载安卓的构建器gradle相关的配置信…

V23092-A1024-A301 工业继电器 24V 6A 一组转换

V23092-A1024-A301是一款通用继电器。参数为24V 6A 该继电器适用于控制各种电气负载,如电机、加热器或其他高电流设备。广泛应用于各种工业控制和自动化系统中,它的封装尺寸和引脚排列符合标准的工业规范,便于安装和使用。 产品种类: 通用…

C语言——贪吃蛇游戏的实现

一. 贪吃蛇的介绍 我们都有玩过一个小游戏——贪吃蛇,贪吃蛇也是一个经典游戏。如上图所示,游戏玩法就是操控一个蛇,让它吃掉食物,每吃掉一个食物就会增加自己身体一格长度,并且保证自己不能撞到墙和自己本身&#xff…

Ubuntu系统安装Anaconda

1. 下载Anconda安装包 1.1 wget命令下载 当然还可以去清华大学开源软件镜像站:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror,下载各种版本的Anaconda。 wget下载命令如下: 我这里下载的是2024.02…

二百三十三、Flume——Flume采集JSON文件到Kafka,再用Flume采集Kafka数据到HDFS中

一、目的 由于使用了新的Kafka协议,因为根据新的协议推送模拟数据到Kafka中,再Flume采集Kafka数据到HDFS中 二、技术选型 (一)Kettle工具 准备使用Kettle的JSON input控件和Kafka producer控件,但是搞了1天没搞定&…

OSPF的LSA详解

一、什么是LSA?LSA作用? 在OSPF协议中,LSA全称链路状态通告,主要由LSA头部信息(LSA摘要)和链路状态组成。部分LSA只有LSA头部信息,无链路状态信息。使用LSA来传递路由信息和拓扑信息&#xff0c…

【STM32F4】STM32CUMX相关环境配置

一、环境配置 我们需要以下两个软件 (一)keil5 最正统,最经典的嵌入式MCU开发环境。 该环境的配置可以看看之前的文章 所需文件如下: 当时配置的是STC8H的环境,现在基于此,重新给STM32配置环境。能让STC…

运营商三要素核验接口-手机实名验证API

运营商三要素核验接口是一种API(Application Programming Interface,应用程序编程接口),主要用于通过互联网技术对接通信运营商的实名制数据库,以验证用户提供的手机号码、身份证号码、姓名这三项关键信息(…

Python | Leetcode Python题解之第37题解数独

题目: 题解: class Solution:def solveSudoku(self, board: List[List[str]]) -> None:def dfs(pos: int):nonlocal validif pos len(spaces):valid Truereturni, j spaces[pos]for digit in range(9):if line[i][digit] column[j][digit] bloc…

jmeter 指定QPS压测接口

文章目录 jmeter 指定QPS压测接口更换语言为中文创建测试任务新建线程组右键线程组,新建http request,填写要你要压测的接口地址、参数如果需要自定义请求头,添加一个Http头信息管理器要查看结果和QPS统计数据,给上门的http请求添…

算法库应用-有序单链表插入节点

学习源头: 模仿贺利坚老师单链表排序文章浏览阅读5.9k次。  本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例。例:拆分单链表 (linklist.h是单链表“算法库”中的头文件,详情单击链接…)//本程…

VForm3的文件上传方式

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…