/* Program to perform Gram-Schmidt orthogonalization. */ #include #include #include #include typedef double real; /* Prototypes */ static real **row_vectors ( const real *, int, int ); static real *vector_subtract_unit_component ( real *, const real *, int); static real *vector_normalize ( real *, int); static real inner_product ( const real *, const real *, int); static real norm ( const real *, int); static void gram_schmidt ( real **, int, int); static void print_vector ( const char *, real *, int n); /* Implementations */ static real ** row_vectors ( const real *matrix, int rows, int cols) { int i,j; real **out; out = (real **)malloc(rows*sizeof(real *)); assert(out); for(i=0; i=0); c = inner_product(out, in, dimen); if(c) for( k=0; k=0); c = norm(inout, dimen); assert(c); for( k=0; k=0); for( k=0; k=0); /* assume non-negative subspace dimension */ assert(dimen>=k); /* assume adequate dimensionality */ for(i=0; i