高斯消元法
作者:互联网
1 #include<cstdio> 2 #include<cmath> 3 4 const double EPS=1E-8; //精度问题 5 double B[110][110]; 6 int n; 7 8 int main(){ 9 scanf("%d",&n); 10 for ( int i=0;i<n;i++){ 11 for ( int j=0;j<n;j++) 12 scanf("%lf",&B[i][j]);//读入系数 13 scanf("%lf",&B[i][n]);//读入值 14 } 15 for ( int i=0;i<n;i++){ 16 int pivot=i; 17 for ( int j=i;j<n;j++)//选择一个当前位置系数绝对值最大的调换过来,防止误差 18 if (fabs(B[j][i]-B[pivot][i])<=EPS) pivot=j; 19 for ( int j=0;j<=n;j++){//交换操作,要将所有的全部交换过来 20 double t=B[i][j]; 21 B[i][j]=B[pivot][j]; 22 B[pivot][j]=t; 23 } 24 if (fabs(B[i][i])<=EPS){//如果该位置系数等于零,则0x=a,一定无解 25 printf("No Solution\n"); 26 return 0; 27 } 28 for ( int j=i+1;j<=n;j++) B[i][j]/=B[i][i];//将该位的系数变为1 29 for ( int j=0;j<n;j++) //此处看不懂 先死记住 30 if (i!=j) 31 for ( int k=i+1;k<=n;k++) B[j][k]-=B[j][i]*B[i][k];//将其他方程用加减法减去系数值 32 } 33 for ( int i=0;i<n;i++) printf("%.2lf\n",B[i][n]);//最后输出结果。 34 return 0; 35 }
标签:10,int,double,高斯消,include,元法,110 来源: https://www.cnblogs.com/rx-1115/p/15864560.html