//追赶法解三对角阵方程组Ax=b。
//n---方程组的阶数。
//a1,a2,a3依次为三对角阵的三对角。
//成功返回1,失败返回0。
int RunEq(int n,double *a1,double *a2,double *a3,double *b,double *x)
{
int i;
double l;
for(i=1;i<n;i++)
{
if(fabs(a2[i-1])<0.00000000001) return 0;
l=a1[i]/a2[i-1];
a2[i]-=a3[i-1]*l;
b[i]-=b[i-1]*l;
}
if(fabs(a2[n-1])<0.00000000001) return 0;
x[n-1]=b[n-1]/a2[n-1];
for(i=n-2;i>=0;i--)
{
x[i]=(b[i]-a3[i]*x[i+1])/a2[i];
}
return 1;
}
//n---方程组的阶数。
//a1,a2,a3依次为三对角阵的三对角。
//成功返回1,失败返回0。
int RunEq(int n,double *a1,double *a2,double *a3,double *b,double *x)
{
int i;
double l;
for(i=1;i<n;i++)
{
if(fabs(a2[i-1])<0.00000000001) return 0;
l=a1[i]/a2[i-1];
a2[i]-=a3[i-1]*l;
b[i]-=b[i-1]*l;
}
if(fabs(a2[n-1])<0.00000000001) return 0;
x[n-1]=b[n-1]/a2[n-1];
for(i=n-2;i>=0;i--)
{
x[i]=(b[i]-a3[i]*x[i+1])/a2[i];
}
return 1;
}
注意:a1的第一个元素需要空出来,因为矩阵第一行不含第一各对角的元素,同样a3的最后一个元素也要空出来