Solving linear equations by Gauss column principal component elimination method

From , 5 Years ago, written in C, viewed 169 times.
URL https://pastebin.vip/view/565030e1
  1. #include<stdio.h>
  2. #include<math.h>
  3. #define MAX_N 20
  4. main()
  5. {
  6.  int i,j,k;
  7.  int n;
  8.  int i_k;                              //列主元所在行的指标
  9.  double m;                             //列主元的值
  10.  double a,b;                           //换行时做终结制值
  11.  double D=1;                           //行列式的值
  12.  double A[MAX_N][MAX_N];
  13.  double B[MAX_N];
  14. printf("请输入系数矩阵的阶数n:\n");
  15.  scanf("%d",&n);
  16.  printf("请输入系数矩阵A:\n");
  17.  for(i=0;i<n;i++)
  18.    for(j=0;j<n;j++)
  19.    scanf("%lf",&A[i][j]);
  20.  printf("请输入右端项b:\n");
  21.  for(i=0;i<n;i++)
  22.  scanf("%lf",&B[i]);
  23.  for(k=0;k<n-1;k++)         //最后一行就不用选了
  24.  {
  25.   m=0;                      //开始按列选主元
  26.   i_k=k;
  27.   for(i=k;i<n;i++)
  28.   {
  29.    if(fabs(A[i][k])>m)
  30.    {
  31.     m=fabs(A[i][k]);
  32.     i_k=i;                  //记录主元所在行的指标
  33.    }  
  34. }  
  35.   if(m==0)
  36.   {
  37.    printf("系数矩阵奇异!\ndetA=0\n");
  38.    break;
  39.   }
  40.   else if(i_k!=k)
  41.   {
  42.    for(j=k;j<n;j++)       //换行     书上的算法这里错了!!!
  43.    {
  44.     a=A[i_k][j];
  45.     A[i_k][j]=A[k][j];
  46.     A[k][j]=a;
  47.    }
  48.    b=B[i_k];
  49.    B[i_k]=B[k];
  50.    B[k]=b;
  51.    D=(-1)*D;                   //换行,行列式变号
  52.   }
  53.   D=D*A[k][k];
  54.   for(i=k+1;i<n;i++)           //计算乘子
  55.   {
  56.    A[i][k]=A[i][k]/A[k][k];
  57.   }
  58.   for(i=k+1;i<n;i++)           //消元
  59.   {
  60.    for(j=k+1;j<n;j++)
  61.    {
  62.     A[i][j]=A[i][j]-A[i][k]*A[k][j];
  63.    }
  64.    B[i]=B[i]-A[i][k]*B[k];
  65.   }  
  66.  }
  67.   for(i=n-1;i>=0;i--)          //回代;临时用b来存储这里的和
  68.   {
  69.    b=0;
  70.    for(j=i+1;j<n;j++)
  71.    {b+=A[i][j]*B[j];}
  72.    B[i]=(B[i]-b)/A[i][i];
  73.   }
  74.  D=D*A[n-1][n-1];        //在k进行循环的时候只循环到n-2(也可以在上面让k循环到n-1)
  75.  printf("系数矩阵行列式的值为%lf。\n",D);
  76.  printf("解为x_i=\n");
  77.  for(i=0;i<n;i++)
  78.  printf("%lf\n",B[i]);
  79. return  0;
  80. }
  81.  

Reply to "Solving linear equations by Gauss column principal component elimination method"

Here you can reply to the paste above

captcha

https://burned.cc - Burn After Reading Website