哪位高手知道下面追赶法解三对角矩阵//是按照什么原理解得

谁知道下面追赶法解三对角矩阵//是按照什么原理解得?

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
const int n=4;                                        //n为方程组系数矩阵的阶数
float b[n+1];                                         //b[]三对角系数矩阵的对角元素,b[0]不用
float c[n];                                           //c[]为三对角系数矩阵的上对角元素,c[0]不用
float a[n];                                           //a[]为三对角系数矩阵的下对角元素,a[0]不用
float f[n+1];                                         //f[]为方程组的常向量项  
float L[n+1];                                         //克劳特分解A=LU,其中,L为下二对角矩阵.L[]存放其对角元素,L[0]不用
float U[n];                                           //U为单位上二对角矩阵.U[]存放其上对角元素,U[0]不用

int main()
{
int i,j;
//输入c[]
cout<<"请输入三对角方程组系数矩阵的上对角元素: "<<endl;
for(i=1;i<n;i++)
cin>>c[i];
//输入b[]
cout<<"请输入三对角方程组系数矩阵的中对角元素: "<<endl;
for(i=1;i<=n;i++)
cin>>b[i];
//输入a[]
cout<<"请输入三对角方程组系数矩阵的下对角元素: "<<endl;
for(i=2;i<=n;i++)
cin>>a[i];
    //输入常向量项
cout<<"请输入方程组常向量: "<<endl;
for(i=1;i<=n;i++)
cin>>f[i];
//计算L和U的各元素
L[1]=b[1];
for(i=1;i<n;i++)
{
U[i]=c[i]/L[i];
L[i+1]=b[i+1]-a[i+1]*U[i];
}
    //求解Ly=f,追赶法中的"追"
float y[n+1];
y[1]=f[1]/L[1];
for(i=2;i<=n;i++)
{
y[i]=(f[i]-a[i]*y[i-1])/L[i];
}
//求解Ux=y,追赶法中的"赶",将解向量存放在f[]中
f[n]=y[n];
for(i=n-1;i>=1;i--)
{
f[i]=y[i]-U[i]*f[i+1];
}
    //输出解
cout<<"三对角方程组的解是:"<<endl;
for(i=1;i<=n;i++)
cout<<setiosflags(ios::fixed)<<setprecision(2)<<"x"<<i<<"="<<f[i]<<'\n';
cout<<endl;
return 0;
}

------解决方案--------------------
对于 Ax=y,
令 A=LU
则 LUx=y,令 x'= Ux,
对于方程 Lx'=y, 由于 L 为下三角,可逐级回代求出 x',
对于方程 Ux=x', 由于 U 为上三角,可逐级回代求出 x,