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

news2024/9/30 5:23:30

一、问题描述

对于线性方程组
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.0
    n = 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:n
        l(i) = a(i)/u(i-1);
        u(i) = b(i)-l(i)*c(i-1);
    end
    % Ly = b
    y = zeros(1,n);
    y(1) = f(1);
    for i =2:1:n
        y(i) = f(i)-l(i)*y(i-1);
    end
    % Ux= y
    x = zeros(n,1);
    x(n) = y(n)/u(n);
    for i =n-1:-1:1
        x(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.coloradmin.cn/o/1614394.html

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

相关文章

Unity导出package

C#代码导出后为一个dll,原有的不同平台的库不变。 以下操作均在build PC 平台下操作。 1.在要导出的文件夹下建assembly definition (Any platform) 2.将项目文件夹下的\Library\ScriptAssemblies中的相应assembly definition的dll复制到要导出的文件夹下 3.在uni…

Linux进阶篇:CentOS7搭建NFS文件共享服务

CentOS7搭建NFS文件共享服务 一、NFS介绍 NFS(Network File System)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享彼此的文件。简单的讲就是可以挂载远程主机的共享目录到本地,就像操作本地磁盘一样&…

适用于摩托车仪表盘的液晶驱动IC:S1D15K01

S1D15K01j是EPSON的一款适用于适用摩托车混合数字仪表盘的车规混合液晶驱动IC。随着摩托车具备的特性和功能的逐渐增多,需要在仪表盘显示器上显示的信息量越来越大。另一方面,可用于显示的空间有限,需要有效地显示信息。在过去,摩…

《深入浅出多模态》: 多模态经典模型:BLIP

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

CANdb++数据库

1.理解主机厂定义的信号矩阵表 2.使用CANdb制作对应矩阵表中报文和信号dbc文件。 3.新建数据库 打开candb软件,点击文件,选择创建数据库,并选择数据库模版,本次测试选择CanTemplate.dbc模版,选择保存在本机中的位置&…

7.机器学习-十大算法之一拉索回归(Lasso)算法原理讲解

7.机器学习-十大算法之一拉索回归(Lasso)算法原理讲解 一摘要二个人简介三前言四原理讲解五算法流程六代码实现6.1 坐标下降法6.2 最小角回归法 七第三方库实现7.1 scikit-learn实现(坐标下降法):7.2 scikit-learn 实现…

idea 中导入的项目maven不自动下载依赖包

导入之后不会自动引入依赖包,如下图,external libraries 下没有依赖 解决方案:重新更新下maven的Local repository 即可

STM32F030K6T6,基于值线ARM的32位MCU,具有16到64KB的闪存、定时器

STM32F030K6T6,ST/意法,基于值线ARM的32位MCU具有16到64KB的闪存、定时器 ADC,通信接口,2.4-3.6 V操作 STM32F030K6T6,ST/意法,基于值线ARM的32位MCU具有16到64KB的闪存、定时器 ADC,通信接口&…

一目了然:ipv4和ipv6的关键区别

ipv4和ipv6是互联网协议的两种版本,它们在多个方面存在显著差异。以下是这两种协议的具体差异: 1.地址长度和地址数量 IPv4使用32位地址,而IPv6使用128位地址。这意味着IPv6的地址空间比IPv4大约2^96倍,能够支持的IP地址数量远远…

深入理解VGG网络,清晰易懂

深入理解VGG网络 VGG网络是深度学习领域中一个非常经典的卷积神经网络(CNN)架构,由牛津大学的视觉几何组(Visual Geometry Group)提出。它在2014年的ImageNet挑战赛中取得了第二名的好成绩,并且在随后的许…

性能监控数据(本地、服务器)

CPU、内存、磁盘等的监控 一、mac本地性能监控 1. top 终端: top load Avg: 平均负载(1分钟,5 分钟,15 分钟)值不能超过 4,要不然就是超负荷运行 Tasks: 进程数 %Cpu(s): idle :剩余百分比 KiB Mem: free:剩余内存&#xff0…

古董展新风尚:山海鲸数据大屏引领科技潮流

在数字化浪潮的推动下,传统文化与现代科技正日益融合,展现出独特的魅力。近日,山海鲸推出了一款古董展览数据可视化大屏,将古董藏品的丰富内涵以直观、生动的形式呈现在观众面前,让人们在欣赏古董之美的同时&#xff0…

nvm报错获取 ‘https://npm.taobao.org/mirrors/node/index.json‘ 时失败

报错 如上图, 报错原因 由于npm.taobao.org域名HTTPS证书到期更换为npmmirror.com 解决 找到nvm安装路径的settings.txt文件 打开添加或者更改镜像地址,报存就好啦。如下 node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: https://…

[docker] 数据的持久化 - Volume bind mounts

[docker] 数据的持久化 - Volume & bind mounts docker 的数据笼统分类可以分为下面这三种: 只读数据 这种数据大多为源码、容器的配置文件,大多数情况下与镜像进行绑定 临时数据 这部分的数据大多数情况下与容器进行绑定,属于可写数据…

DRF 路由层

路由层 【1】原始路由 &#xff08;1&#xff09;正则re_path from django.urls import path, re_path from book import viewsurlpatterns [re_path(rbook/(?P<pk>\d)?/?$, views.BookAPIView.as_view(), namebook) ] 示例解释 (?P<pk>\d)是一个命名正…

使用mmsegmentaion遇到的问题

利用mmsegmentaion跑自定义数据集时的bug处理&#xff08;使用bisenetV2&#xff09; 1. ValueError: val_dataloader, val_cfg, and val_evaluator should be either all None or not None, but got val_dataloader{batch_size: 1, num_workers: 4}, val_cfg{type: ValLoop}, …

c++ 线性搜索与二分搜索

线性搜索 假设该项目以随机顺序存在于数组中&#xff0c;并且我们必须找到一个项目。那么搜索目标项目的唯一方法就是从第一个位置开始&#xff0c;并将其与目标进行比较。如果项目相同&#xff0c;我们将返回当前项目的位置。否则&#xff0c;我们将转移到下一个位置。…

在Qt creator中使用多光标

2024年4月22日&#xff0c;周一下午 Qt Creator 支持多光标模式。 多光标模式允许你在同一时间在多个光标位置进行编辑&#xff0c;从而可以更快地进行一些重复性的编辑操作。 要启用多光标模式&#xff0c;请按住 Alt 键&#xff0c;并用鼠标左键在文本编辑器中选择多个光标…

恒创科技:网站更改域名对seo的影响大吗?

众所周知&#xff0c;搜索引擎优化 (SEO) 对于增加网站的自然流量、提高转化率以及提高品牌知名度至关重要。所以&#xff0c;网站在进行更改域名时&#xff0c;我们应当关注其对 SEO 的影响。 网站更改域名对 SEO 影响大吗? 更改域名会更改网站上每个页面的 URL &#xff0c;…

SpringSecurity初探(一)

认证:知道你是谁 授权:你能干什么 创建SpringBoot应用,引入web和security <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency><group…