/* * Solve set of linear equations involving * a Hilbert matrix * i.e. solves Hx=b, where b is the vector [1,1,1....1] * * Requires: flash.cpp * */ #include #include "flash.h" using namespace std; Miracl precision=20; static Flash A[20][20]; static Flash b[20]; BOOL gauss(Flash A[][20],Flash b[],int n) { /* solve Ax=b using Gaussian elimination * * solution returned in b */ int i,ii,j,jj,k,m; int row[20]; BOOL ok; Flash s; ok=TRUE; for (i=0;is) { m=j; s=fabs(A[jj][i]); } } if (s==0) { // no non-zero pivot found ok=FALSE; break; } k=row[i]; row[i]=row[m]; row[m]=k; // swap row indices ii=row[i]; for (j=i+1;j=i;k--) A[jj][k]-=s*A[ii][k]; } } if (ok) for (j=n-1;j>=0;j--) { /* Backward substitution */ s=0; for (k=j+1;kRPOINT=OFF; /* use fractions for output */ do { cout << "Order of Hilbert matrix H= "; cin >> n; } while (n<2 || n>19); for (i=0;iEXACT) cout << "Result is exact!\n"; } else cout << "H is singular!\n"; return 0; }