egs@epsilon.UUCP (Ed Sheppard) (02/25/85)
As Greg Kuperberg has pointed out in private mail (thanks Greg), my determinant evaluator was wrong. In particular, the matrix [ 0 1 ] [ 1 0 ] has a det of -1, not zero as my function would have reported. Well, that's strike one. Let me try again with the following: float determ(n,a) int n; float a[n][n]; /* ugh! */ { int i, j; float t; if(n==1) return(a[0][0]); for(i=0; i<n; ++i) { if(a[i][0]!=0) break; } if(i) { if(i>=n) return(0); /* zero column -> zero det */ /* make a[0] = a[0]+a[i], a[i] = -a[0] */ a[0][0] = a[i][0]; for(j=1; j<n; ++j) { t = -a[0][j]; a[0][j] += a[i][j]; a[i][j] = t; } } for(++i; i<n; ++i) { factor = a[i][0]/a[0][0]; for(j=1; j<n; ++j) { a[i][j] -= factor*a[0][j]; } } return(a[0][0]*determ(n-1,&a[1][1])); } Maybe I got it right this time, or is this strike two :-)? Ed Sheppard Bellcore