哪位高手知道下面追赶法解三对角矩阵//是按照什么原理解得
谁知道下面追赶法解三对角矩阵//是按照什么原理解得?
------解决方案--------------------
对于 Ax=y,
令 A=LU
则 LUx=y,令 x'= Ux,
对于方程 Lx'=y, 由于 L 为下三角,可逐级回代求出 x',
对于方程 Ux=x', 由于 U 为上三角,可逐级回代求出 x,
#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,