您的位置:首页 > 其它

高斯消元

2014-04-23 10:20 357 查看

double型 fabs

double  a[maxn][maxn] , x[maxn] ;  //a[i][j] 系数矩阵 , a[i][n+1]  = y[i] , x解
int     n ;   //n个方程
void    guass(){
int i , j , k ;
double  sum , rate ;
for(k = 1 ; k < n ;  k++){
for(i = j = k ; i <= n ; i++) j = fabs(a[i][k]) > fabs(a[j][k]) ? i : j ;
for(i = k ; i <= n+1 ; i++)  swap(a[j][i] , a[k][i]) ;
for(i = k+1 ; i <= n ; i++)
for(rate = a[i][k]/a[k][k] , j = k ; j <= n+1 ; j++)
a[i][j] -= a[k][j]*rate ;
}
for(i = n ; i >= 1 ; i--){
for(sum = 0 , j = i+1 ; j <= n ; sum += a[i][j]*x[j],j++) ;
x[i] = (a[i][n+1] - sum)/a[i][i] ;
}
}

double  Fix(double x){   // 将 -0.000 变成 0.00 ,结果输出Fix(x[])
if(fabs(x) < 1e-4) return 0 ;
return x ;
}


Xor 的高斯消元

int a[maxn][maxn] , x[maxn] ;
int     n ;
void    guass(){
int i , j , k ;
double  sum , rate ;
for(k = 1 ; k < n ;  k++){
for(i = k ; i <= n ; i++) if(a[i][k]){ j = i ; break ;}
for(i = k ; i <= n+1 ; i++)  swap(a[j][i] , a[k][i]) ;
for(i = k+1 ; i <= n ; i++){
if(a[i][k] == 0) continue ;
for(j = k ; j <= n+1 ; j++)
a[i][j] ^= a[k][j] ;
}
}
for(i = n ; i >= 1 ; i--){
x[i] = a[i][n+1] ;
for(j = i+1 ; j <= n ; x[i] ^= (a[i][j]&&x[j]),j++) ;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: