//高斯消元法
#include <stdio.h> #include <math.h> #define n 3 void GSXiaoYuanFun(float c); void main() { GSXiaoYuanFun(1e-3); } void GSXiaoYuanFun(float c) { float m,M=0,xx; float d,x[n]; int k,i,j,l,q; float a[3][3]={{2,1,1},{1,3,2},{1,2,2}}; float b[3]={4,6,5}; printf("消元后的矩阵是:\n"); for(k=0;k<n;k++) { d=a[k][k]; for(i=k+1;i<n;i++) { m=a[i][k]/a[k][k]; b[i]=b[i]-m*b[k]; if(fabs(a[i][k])>fabs(d)) { d=a[i][k]; l=i; } if(a[k][k]<c) { for(q=0;q<n;q++) { xx=a[k][q];a[k][q]=a[l][q];a[l][q]=xx; } }/*列主元消元*/ for(j=0;j<n;j++) { a[i][j]=a[i][j]-m*a[k][j]; } } }/*消元成三角矩阵*/ for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%-10f",a[i][j]); printf("%f\n",b[i]); } /*解方程*/ k=n-1; x[k]=b[k]/a[k][k]; printf("\tx[%d]=%f\n",n,x[k]); for(i=k-1;i>=0;i--) { for(j=i+1;j<=k;j++) { M=M+(a[i][j]*x[j]); } x[i]=(b[i]-M)/a[i][i]; M=0; printf("\tx[%d]=%f\n",i+1,x[i]); } }
高斯消元
最新推荐文章于 2013-07-22 15:25:10 发布