用高斯消去法解方程組2x-y-z=4,3x+4y-2z=11,3x-2y+4z=11的解

 #include<stdio.h>
#define n 3                         /*n爲方程組係數矩陣的階數*/
int Gauss(float a[n][n],float b[n])
{
 int i,j,k,flag=1;
 float t;
 for(i=0;i<n-1;i++)
 {
  if(a[i][i]==0)
  {
   flag=0;
   break;
  }
  else
  {
   for(j=i+1;j<n;j++)     /*消元過程開始*/
   {
    t=-a[j][i]/a[i][i];
    b[j]=b[j]+t*b[i];
    for(k=i;k<n;k++)
     a[j][k]=a[j][k]+t*a[i][k];
   }
  }
 }
 return(flag);
}
void zg_matric(float a[n][n],float b[n])    /*輸出增廣矩陣*/
{
 int i,j;
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
   printf("%10f",a[i][j]);
  printf("%10f",b[i]);
  printf("/n");
 }
 printf("/n");
}
void main()
{
 static float a[n][n]={{2,-1,-1},{3,4,-2},{3,-2,4}};
 float b[n]={4,11,11};
 float x[n]={0,0,0};
 int i,j,flag;
 zg_matric(a,b);
 flag=Gauss(a,b);
 if(flag==0)                               /*無解*/
  printf("Gauss method dose not run.");
 else                                      /*迴帶過程開始*/
 {
  x[n-1]=b[n-1]/a[n-1][n-1];
  for(i=n-2;i>=0;i--)
  {
   x[i]=b[i];
   for(j=i+1;j<n;j++)
    x[i]=x[i]-a[i][j]*x[j];
   x[i]=x[i]/a[i][i];
  }
  for(i=0;i<n;i++)                     /*輸出方程組的解*/
   printf("x%d=%11.7f/n",i+1,x[i]);
 }
}

 

運行結果如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章