算法:
1、输入方程组维数n,矩阵A,右端项b和控制精度eps
2、对于k = 1 : n-1 :
(1)、| A( u , k ) | = max( A( i , k ) , k <= i <= n );
(2)、如果| A( u , k ) | < eps 则停止;
(3)、如果 u = k 则转 (4) ,否则 A( k , k : n+1) A( u , k : n+1 ) ;
(4)、A( k+1 : n , k ) := A( k+1 : n , k ) / A( k , k ),
A( k+1 : n , k+1 : n ) := A( k+1 : n , k+1 : n ) - A( k+1 : n , k ) · A( k , k+1 : n ),
b( k+1 : n ) := b( k+1 : n ) - A( k+1 : n , k ) · b( k )
3、如果 A( n , n ) = 0 则停止
4、b( n ) := b( n ) / A( n , n ) ,
对于 i = n-1 : -1 : 1 ,
b( i ) := [ b(i) - A( i , i+1 : n ) · b( i+1 : n ) ] / A( i , i )
5、输出解b(1:n)
C语言代码(未考虑无解情况):
#include #include #include #define M 128 const double eps=1e-6; double mat[M][M]; double a[M]; int n; bool Read() { int i,j; if(scanf("%d",&n)!=1) return false; for(i=0;ifabs(mat[k][i])) k=j; } memmove(tmp,mat[i],sizeof(tmp)); memmove(mat[i],mat[k],sizeof(tmp)); memmove(mat[k],tmp,sizeof(tmp)); for(j=i+1;j=0;i--){ for(j=i+1,tmp=0.0;j