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;
}
运行结果如下:
上述运行结果验证了3种情况,均正确,如无解直接给出结论,若有解(唯一解或无穷解),给出相应的上三角矩阵和相应的结论!