C语言求解线性方程组(2)

for(i=0;i<row-1;i++){
  exchange_row(matrix, i, row);
  if(fabs(*(matrix[i]+i))<0.00001)
   continue;
  for(j=i+1;j<row;j++){
   coe = *(matrix[j]+i) / *(matrix[i]+i);
   for(k=i;k<col;k++)
    *(matrix[j]+k) -= coe * *(matrix[i]+k);
  }
 }

if(col-1>row)
  result = 1;
 else if(col-1==row){
  if(fabs(*(matrix[row-1]+row-1))>0.00001)
   result = 0;
  else{
   if(fabs(*(matrix[row-1]+row))>0.00001)
    result = -1;
   else
    result = 1;
  }
 }
 else{
  result = 0;
  for(i=0;i<row;i++)
   if(fabs(*(matrix[i]+col-2))<0.00001&&fabs(*(matrix[i]+col-1))>0.00001){
    result = -1;
    break;
   }
 }


 return result;
}

void exchange_row(double *matrix[ROW], int flag, int row)
{
 int i;
 double *temp;

for(i=flag+1;i<row;i++)
  if(fabs(*(matrix[flag]+flag))<fabs(*(matrix[i]+flag))){
   temp = matrix[flag];
   matrix[flag] = matrix[i];
   matrix[i] = temp;
  }

return;
}

void show_solution(double *matrix[ROW], int row, int col)
{
 int i, j;

for(i=0;i<row;i++){
  for(j=0;j<col;j++)
   printf("%-8.3f", *(matrix[i]+j));
  putchar('\n');
 }

return;
}

运行结果如下:

C语言求解线性方程组

上述运行结果验证了3种情况,均正确,如无解直接给出结论,若有解(唯一解或无穷解),给出相应的上三角矩阵和相应的结论!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/aa277f032c4cfc6d5a1085f1debd3e22.html