/*================================== Utility functions for project nnes Release 1.1: Added mmulvt() ==================================*/ #include REAL Dot_Product(int n, REAL *a, REAL *b) { int i; REAL sum; sum=ZERO; for (i=1; i<=n; i++) sum += a[i]*b[i]; return sum; } int IMAX(int a, int b) { if (a>=b) return a; else return b; } int IMIN(int a, int b) { if (a<=b) return a; else return b; } void Line0(FILE *fp) { short k; fprintf(fp," *"); for (k=1; k<=71; k++) fprintf(fp," "); fprintf(fp,"*\n"); } void Line1(FILE *fp) { short k; fprintf(fp," *"); for (k=1; k<=71; k++) fprintf(fp,"-"); fprintf(fp,"*\n"); } REAL MAX(REAL a, REAL b) { if (a>=b) return a; else return b; } REAL MIN(REAL a, REAL b) { if (a<=b) return a; else return b; } void Msg(FILE *fp, char *text) { short i,l; fprintf(fp," *"); fprintf(fp,"%s",text); l=strlen(text); for (i=1; i<=73-l-2; i++) fprintf(fp," "); fprintf(fp,"*\n"); } REAL Sign(REAL a, REAL b) { if (b>=0) return a; else return (-a); } REAL Sqr(REAL a) { return a*a; } void mmulv(int N, REAL **A, REAL *B, REAL *C) { /********************************************** * MULTIPLICATION OF A REAL MATRIX BY A VECTOR * * ------------------------------------------- * * INPUTS: A MATRIX N*N * * B VECTOR N*1 * * N INTEGER * * ------------------------------------------- * * OUTPUT: C VECTOR N*1 PRODUCT A*B * **********************************************/ REAL SUM; int I,K; for (I=1; I<=N; I++) { SUM=ZERO; for (K=1; K<=N; K++) SUM += A[I][K]*B[K]; C[I]=SUM; } } void mmulvt(int N, REAL **A, REAL *B, REAL *C) { /********************************************** * MULTIPLICATION OF THE TRANSPOSE OF A REAL * * MATRIX BY A VECTOR * * ------------------------------------------- * * INPUTS: A MATRIX N*N * * B VECTOR N*1 * * N INTEGER * * ------------------------------------------- * * OUTPUT: C VECTOR N*1 PRODUCT A*B * **********************************************/ REAL SUM; int I,K; for (I=1; I<=N; I++) { SUM=ZERO; for (K=1; K<=N; K++) SUM += A[K][I]*B[K]; C[I]=SUM; } } // for debug only void PrintVec(int n, char *Name, REAL *V) { short i; printf("%s\n", Name); for (i=1; i<=n; i++) printf(" %f",V[i]); printf("\n"); } //end of file utils.cpp