第3章:线性方程组求解 第3章:线性方程组求解代码汇编 问题:求Ax-b的解,A是M阶可逆方阵 约定:算法中用到的是M×N增广矩阵,N=M+1; 变量:i,j,k等为整型变量,x,y,z为实型变量; 1把任意M阶线性方程组化为上三角形方程组 的C语言代码 for (k=0 k<M:; k++) 【x=A[k[k for(=k; j<N;j++)A[k][l/=X for(i=k+; i<M; i++) [x=A[k]: forli=k;jN;j++)A[][]-=x*A[k][j] 经验证,这段代码正确
第 3 章:线性方程组求解 1/4 第 3 章:线性方程组求解代码汇编 问题:求 Ax=b 的解,A 是 M 阶可逆方阵; 约定:算法中用到的是 M×N 增广矩阵,N=M+1; 变量:i,j,k 等为整型变量,x,y,z 为实型变量; 1.把任意 M 阶线性方程组化为上三角形方程组 的 C 语言代码: for(k=0;k<M;k++) { x = A[k][k]; for(j=k;j<N;j++) A[k][j] /= x; for(i=k+1;i<M;i++) { x=A[i][k]; for(j=k;j<N;j++)A[i][j] -= x*A[k][j]; } } 经验证,这段代码正确
第3章:线性方程组求解 2/4 2.求解上三角形线性方程组c语言代码: for(k=M-1; k>0; k--) for(i=0 i<k;i++) A[[N-1]-=A[][k]*Ak[N1] A[i]k]=0.0 已经过验证,这段代码正确 3约当消去法C语言代码: for(K=0; K<M; K++) [X=A[KJ[K: for(j=ki j<N; j++)A[K][]/=X; for(i=0; i<M; i ++ i if(i==k)continue X=A[OIK
第 3 章:线性方程组求解 2/4 2. 求解上三角形线性方程组 c 语言代码: for(k=M-1;k>0;k--) for(i=0;i<k;i++) { A[i][N-1] -= A[i][k]*A[k][N-1]; A[i][k]=0.0; } 已经过验证,这段代码正确 3.约当消去法 C 语言代码: for(K=0;K<M;K++) { x=A[K][K]; for(j=K;j<N;j++) A[K][j] /= x; for(i=0;i<M;i++) { if(i==K) continue; x=A[i][K];
第3章:线性方程组求解 3/4 for(j=Kj<Nj++)A[[-=X*AK[j; 已经过验证,这段代码正确 4利用约当消去法求矩阵的逆 对于M×M可逆矩阵A我们可以构造矩阵T=(AD,那么用约当消 去法把T的左边M列化为单位矩阵后其效果相当于用A1左乘 T从而得到A-1(AD=(A1)所以T的后面的M列就是我们所要 求的A1 用上面的代码演示矩阵求逆 4实现选主元的源代码 K X=Math. abs(A[K][KD for(i=K+1; i<M; i++) i if(Math. abs(A[[k )<x) continue x=Math. abs(aj[k]);
第 3 章:线性方程组求解 3/4 for(j=K;j<N;j++)A[i][j] -=x*A[K][j]; } } 已经过验证,这段代码正确 4.利用约当消去法求矩阵的逆 对于 M×M 可逆矩阵A,我们可以构造矩阵 T=(A I),那么用约当消 去法把 T 的左边 M 列化为单位矩阵后,其效果相当于用 A-1左乘 T,从而得到 A-1 (A I)=(I A-1 ),所以 T 的后面的 M 列就是我们所要 求的 A-1 用上面的代码演示矩阵求逆 4 实现选主元的源代码 j=K; x=Math.abs(A[K][K]); for(i=K+1;i<M;i++) { if(Math.abs(A[i][K])<x) continue; x=Math.abs(A[i][K]); j=i;
第3章:线性方程组求解 4/4 //say(j="+j+",X="+A][K] for(i=k; k<N; i ++ IX=AKJO A[K的=A[j[ A[ln=X; 提示:把 Math. abs0改写为fabs0即成为C语言代码。Say0是 用于调试的一个小脚本程序。 已经过验证,这段代码正确
第 3 章:线性方程组求解 4/4 } //say("j="+j+", x="+A[j][K]); for(i=K;i<N;i++) { x=A[K][i]; A[K][i]=A[j][i]; A[j][i]=x; } 提示:把 Math.abs()改写为 fabs()即成为 C 语言代码。say()是 用于调试的一个小脚本程序。 已经过验证,这段代码正确