2016-04-08 23 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

数は次のようにご希望のmessage.Youは、あなたのコード内でループのための最後を変更することができます印刷し、有効なprinting.If前に有効でないかどうかのチェックを実行します。

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

これは答えよりむしろコメントです。 –