【数值分析】追赶法解三对角方程组,matlab实现

本文详细介绍了追赶法(也称为降阶方法)在三对角矩阵的LU分解中的步骤,展示了如何通过迭代计算将原问题转换为更简单的形式,最终用Matlab编程实现求解过程。

追赶法

设三对角矩阵 A{A}A ,如果存在Doolittle分解,则有
A=[a1c1b2a2c2⋱⋱⋱bn−1an−1cn−1bnan] A= \begin{bmatrix} a_1 & c_1 & & & \\ b_2 & a_2 & c_2 & & \\ & \ddots & \ddots & \ddots & \\ & & b_{n-1} & a_{n-1} & c_{n-1} \\ & & & b_n & a_n \end{bmatrix} A=a1b2c1a2c2bn1an1bncn1an

LU=A=[1p21p31⋱⋱pn1][q1c1q2c2⋱⋱qn−1cn−1qn] LU=A= \begin{bmatrix} 1 & & & \\ p_2 & 1 & & \\ & p3 & 1& \\ & & \ddots & \ddots \\ &&&p_n&1 \end{bmatrix} \begin{bmatrix} q_1 & c_1 & & & \\ & q_2 & c_2 & & \\ & & \ddots & \ddots & \\ & & & q_{n-1} & c_{n-1} \\ & & & & q_n \end{bmatrix} LU=A=1p21p31pn1q1c1q2c2qn1cn1qn

步骤:
q1=a1pi=biqi−1  ,  i=2,3,⋯n  ,  我自己除以我上面qi=ai−pici−1  ,  我自己减去我左边乘以我上面 \begin{align*} q_1=& a_1 \\ \\ p_i=& \frac{b_i}{q_{i-1}} \,\,,\,\, i=2,3, \cdots n\,\,,\,\, 我自己除以我上面 \\ \\ q_i=& a_i-p_ic_{i-1} \,\,,\,\, 我自己减去我左边乘以我上面 \end{align*} q1=pi=qi=a1qi1bi,i=2,3,n,我自己除以我上面aipici1,我自己减去我左边乘以我上面
{Ly=bUx=y \begin{cases} Ly=b \\ Ux=y \end{cases} {Ly=bUx=y
y1=b1yi=bi−pi⋅yi−1  ,  i=2,3,⋯ ,n \begin{align*} y_1=&b_1\\ \\ y_i=& b_i-p_i \cdot y_{i-1} \,\,,\,\, i=2,3,\cdots ,n \end{align*} y1=yi=b1bipiyi1,i=2,3,,n
xn=ynqnxi=(yi−ci⋅xi+1)/qi  ,  i=n−1,⋯ ,2,1 \begin{align*} x_n=& \frac{y_n}{q_n} \\ \\ x_i=& (y_i-c_i \cdot x_{i+1})/q_i \,\,,\,\, i=n-1,\cdots ,2,1 \end{align*} xn=xi=qnyn(yicixi+1)/qi,i=n1,,2,1

[!example]-
A=[22−112−112−112−11]  ,  b=[679111] A= \begin{bmatrix} 2 & 2 & & & \\ -1 & 1 & 2 & & \\ & -1 & 1 & 2 & \\ & & -1 & 1 & 2 \\ & & & -1 & 1 \end{bmatrix} \,\,,\,\, b=\begin{bmatrix} 6\\7\\9\\11\\1 \end{bmatrix} A=2121121121121,b=679111
解:
[22−121−(−12)⋅2=22−1222−1222−122] \begin{bmatrix} 2 & 2 & & & \\ - \frac{1}{2} & 1-(- \frac{1}{2})\cdot 2=2 & 2 & & \\ & - \frac{1}{2} & 2 & 2 & \\ & & - \frac{1}{2} & 2 & 2 \\ & & & - \frac{1}{2} & 2 \end{bmatrix} 22121(21)2=2212221222122
写成LU的形式
L=[1−1/21−1/21−1/21−1/21]  ,  U=[222222222]L= \begin{bmatrix} 1 & & & & \\ -1/2 & 1& & & \\ & -1/2 & 1 & & \\ & & -1/2 & 1 & \\ & & & -1/2 & 1 \end{bmatrix} \,\,,\,\, U= \begin{bmatrix} 2 & 2 & & & \\ & 2 & 2 & & \\ & & 2 & 2 & \\ & & & 2 & 2 \\ & & & & 2 \end{bmatrix} L=11/211/211/211/21,U=222222222
Ly=b{Ly=b}Ly=b
[1−1/21−1/21−1/21−1/21][y1y2y3y4y5]=[679111]→{y1=6−y1/2+y2=7→y2=10−y2/2+y3=9→y2=14−y3/2+y4=11→y3=18−y4/2+y5=1→y5=10 \begin{bmatrix} 1 & & & & \\ -1/2 & 1& & & \\ & -1/2 & 1 & & \\ & & -1/2 & 1 & \\ & & & -1/2 & 1 \end{bmatrix} \begin{bmatrix} y_1\\y_2\\y_3\\y_4\\y_5 \end{bmatrix}= \begin{bmatrix} 6\\7\\9\\11\\1 \end{bmatrix}\to \begin{cases} y_1=6\\ -y_1/2+y_2=7\to y_2=10 \\ -y_2/2+y_3=9\to y_2=14 \\ -y_3/2+y_4=11\to y_3=18\\ -y_4/2+y_5=1\to y_5=10 \end{cases} 11/211/211/211/21y1y2y3y4y5=679111y1=6y1/2+y2=7y2=10y2/2+y3=9y2=14y3/2+y4=11y3=18y4/2+y5=1y5=10
Ux=y{Ux=y}Ux=y
[222222222][x1x2x3x4x5]=[610141810]→[12345] \begin{bmatrix} 2 & 2 & & & \\ & 2 & 2 & & \\ & & 2 & 2 & \\ & & & 2 & 2 \\ & & & & 2 \end{bmatrix}\begin{bmatrix} x_1\\x_2\\x_3\\x_4\\x_5 \end{bmatrix}= \begin{bmatrix} 6\\10\\14\\18\\10 \end{bmatrix} \to \begin{bmatrix} 1\\2\\3\\4\\5 \end{bmatrix} 222222222x1x2x3x4x5=61014181012345

matlab编程实现

%% 追赶法例子
a = [2 1 1 1 1];
b = [0 -1 -1 -1 -1];
c = [2 2 2 2 0];
B = [6 7 9 11 1];
x = tridiagSolver(a,b,c,B,5)
A = diag(a)+diag(repmat([-1],1,4), -1)+ diag(repmat([2],1,4),1)
A*x'

%% 追赶法解三对角线性方程组 傻逼版
% 输入主对角元素向量,下次对角元素向量,上次对角元素向量,方程右边的向量,阶数
function x = tridiagSolver(a,b,c,B,n)
    q(1) = a(1)
    for i = 2:n
        p(i) = b(i)/q(i-1)
        q(i) = a(i)-p(i)*c(i-1)
    end
    y(1) = B(1)
    for i = 2:n
        y(i) = B(i)-p(i)*y(i-1)
    end
    x(n) = y(n)/q(n)
    for i = n-1:-1:1
        x(i)=(y(i)-c(i)*x(i+1))/q(i)
    end
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值