/*****************************************************************/ /** **/ /** ARTLIB.C **/ /** general library functions for ART model **/ /** **/ /** Takehisa Tanaka **/ /** M.R.I.T. **/ /** 1991/08/06 **/ /*****************************************************************/ #include "nsl_include.h" /*****************************************************************/ /** matrix_by_vector() **/ /** multiply matrix by vector **/ /** 1991/08/06 **/ /*****************************************************************/ NslInt1 matrix_by_vector(NslInt2& mat,NslInt1& vec) { int m,n; int x,y; /* Checking the matrix and vector size */ m = mat.get_xn(); n = mat.get_yn(); if (n != vec.get_xn()) { cerr << "Oops! It seems error in matrix_by_vector().\n"; exit(-1); } NslInt1 tmp_vector(m); tmp_vector = 0; for (x = 0;x < m;x++) for (y = 0;y < n;y++) tmp_vector.elem(x) += mat.elem(x,y) * vec.elem(y); return tmp_vector; } /*****************************************************************/ /** uniform_random() **/ /** return random value according to uniform **/ /** distribution **/ /** 1991/08/06 **/ /*****************************************************************/ float uniform_random(float min,float max) { const double MAX_RAND = 2147483648.0; /* maximum generated by rand() */ float tmp; max = max - min; // tmp = (double) random() / MAX_RAND; // taken out AW 3/11/97 tmp = (double) rand() / MAX_RAND; // added AW 3/11/97 tmp *= max; tmp += min; return tmp; } /*****************************************************************/ /** vector_matrix() **/ /** Transform nsl_vector into nsl_matrix **/ /** 1991/08/09 **/ /*****************************************************************/ int vector_matrix(NslInt1& vec,NslInt2& mat) { int size,x_size,y_size; int i,x,y; size = vec.get_xn(); x_size = mat.get_xn(); y_size = mat.get_yn(); if (size != x_size * y_size) { cerr << "vector can't be transformed into matrix!!\n"; cerr << "in vector_matrix().\n"; return -1; } i = 0; for (x = 0;x < x_size;x++) { // reversed x,y for (y = 0; y < y_size;y++) { mat.elem(x,y) = vec.elem(i); i++; } } return 0; } /*****************************************************************/ /** matrix_vector() **/ /** Transform nsl_vector into nsl_matrix **/ /** 1991/08/09 **/ /*****************************************************************/ int matrix_vector(NslInt2& mat,NslInt1& vec) { int size,x_size,y_size; int i,x,y; size = vec.get_xn(); x_size = mat.get_xn(); y_size = mat.get_yn(); if (size != x_size * y_size) { cerr << "vector can't be transformed into matrix!!\n"; cerr << "in matrix_vector().\n"; return -1; } i = 0; for (x = 0;x < x_size;x++) { // reversed x,y for (y = 0; y < y_size;y++) { vec.elem(i) = mat.elem(x,y); i++; } } return 0; }