此处只给定一个函数,传入的数组计算是从1开始,而不是从0开始 数组
这个版本比较复杂,可是便于理解求解过程 函数
int TM(double a[], double b[], double c[], double r[], double x[],int n) { //原矩阵形式 要求 对角占优 a(1)=0 c(n)=0 //b1 c1 //a2 b2 c2 // a3 b3 c3 // ··· // an bn //分解后的矩阵 LU分解 上三角为单位阵 //alpha 1 beta //gamma alpha 1 beta // gamma alpha 1 beta // `````` ``` `` `` // gamma alpha 1 // Ax=b LUx=d Ux=y Ly=d //仅对A分解 double *gamma, *alpha, *beta, *y; gamma=new double[n+1]; alpha=new double[n+1]; beta=new double[n+1]; y=new double[n+1]; gamma[1]=0;//gamma没有1,这里设为0 alpha[1]=b[1]; beta[1]=c[1]/alpha[1]; for (int i=2;i<=n-1;i++){ gamma[i]=a[i]; alpha[i]=b[i]-beta[i-1]*gamma[i]; beta[i]=c[i]/alpha[i];//beta只到n-1 } gamma[n]=a[n]; alpha[n]=b[n]-beta[n-1]*gamma[n]; //由Ly=d求y 追 y[1]=r[1]/alpha[1]; for (int i=2;i<=n;i++){ y[i]=(r[i]-gamma[i]*y[i-1])/alpha[i]; } //由Ux=y求x 赶 x[n]=y[n]; for (int i=n-1;i>=1;i--){ x[i]=y[i]-beta[i]*x[i+1]; } delete[] gamma; delete[] alpha; delete[] beta; delete[] y; return 0; }