2016-04-08 129 views
0

只有當系統具有唯一的解決方案時,此代碼纔有效。當沒有解決方案或無限多的解決方案時,應該打印出「沒有獨特的解決方案」。但下面的代碼打印出「nan」或「inf」。我怎樣才能做到這一點?C中的高斯消除法

#include<stdio.h> 
int main() 
{ 
int i,j,k,n; 
double A[20][20],c,x[10]; 
printf("\nEnter the size of matrix: "); 
scanf("%d",&n); 
printf("\nEnter the elements of augmented matrix row-wise:\n"); 
for(i=1; i<=n; i++) 
{ 
    for(j=1; j<=(n+1); j++) 
    { 
     printf(" A[%d][%d]:", i,j); 
     scanf("%lf",&A[i][j]); 
    } 
} 

for(j=1; j<=n; j++) 
{ 
    for(i=1; i<=n; i++) 
    { 
     if(i!=j) 
     { 
      c=A[i][j]/A[j][j]; 
      for(k=1; k<=n+1; k++) 
      { 
       A[i][k]=A[i][k]-c*A[j][k]; 
      } 
     } 
    } 
} 
printf("\nThe solution is:\n"); 
for(i=1; i<=n; i++) 
{ 
    x[i]=A[i][n+1]/A[i][i]; 
    printf("\n x%d=%0.3f\n",i,x[i]); 
} 
return(0); 
} 
+1

您需要添加除以零的支票。 – aschepler

+0

當然存在一個非唯一的解決方案時,代碼會遇到'/ A [j] [j]'0.0的分割。 '/ 0.0'也由於舍入問題而發生。 – chux

回答

1

執行檢查的數量是否有效與否之前printing.If無效,打印您所需的message.You可以修改持續循環在你的代碼如下:

for(i=1; i<=n; i++) 
{ 
    x[i]=A[i][n+1]/A[i][i]; 
    //Nan and inf check 
    if((A[i][i]!=A[i][i]) || (A[i][i] ==0)) 
     break; 
    else 
     printf("\n x%d=%0.3f\n",i,x[i]); 
} 
printf("Has no unique solution"); 
return(0); 
} 

Handling Infinity and Nan

+2

這不是一個答案而是一個評論。 –