/* iogslvectormatrix.cpp - input and output to a file one or several matrices Copyright (C) 2010 Rui Rodrigues This software is released under the terms of the GNU General Public License (http://www.gnu.org/copyleft/gpl.html). */ #include #include #include using namespace std; #include #include #include #include #include #include #include using namespace std; //save a vector that contains several gslmatrices void savegslvectormatrix(FILE* writetofile, gsl_vector* v,vector&sizes){ //int num_matrices=sizes[0];//sizes.size()=1+2*sizes[0]; for(int i=0;i<1+2*sizes[0];++i) fprintf(writetofile,"%u ",sizes[i]); fprintf(writetofile,"\n"); int failure=gsl_vector_fprintf (writetofile, v, "%11.8g"); if(failure){ cout<<"couldn t save gsl_vector!"<&sizes){ if(readfromfile==0){ cout<<"could not open file for reading"<size!=tamtotal){ cout<<"gsl_vector doesn t have theexpected size!"< sizes(2*num_matrices); for(int i=0;i<2*num_matrices;++i) if(fscanf(readfromfile,"%u",&sizes[i])!=-1){ cout<<"problem reading size matrices"<size){ throw "vector size doesn t fit with matrix in file!"; } int a=gsl_vector_fscanf(readmatrix,v); if(a!=0) throw "problem reading gsl_vector!"; fclose(readmatrix); } //this version receives a pointer to a gsl_matrix but it allocattes that gsl_matrix void readgslmatriz(const char* filename,gsl_matrix*&m){ FILE * readmatrix = fopen(filename,"r"); int nlin, ncol; if(fscanf (readmatrix,"%u",&nlin)!=1){ cout<<"problem reading nlin in readgslmatriz(version allocating memory)"<size1, (int long)m->size2); gsl_matrix_fprintf (writematrix,m,"%.8f"); fclose(writematrix); } //used for rbm void writegslvector(const char* filename,gsl_vector*m){ FILE * writevector = fopen(filename,"w"); fprintf(writevector,"%lu \n",(int long) m->size); gsl_vector_fprintf (writevector,m,"%.8f"); fclose(writevector); } //this version receives a pointer to an alredy allocated gsl_vector void readgslvector(const char* filename,gsl_vector*m){ FILE * readvector = fopen(filename,"r"); int nelements; if(fscanf (readvector,"%u",&nelements)!=1){ cout<<"problem reading nelements"<size){ throw "vector dimensions don t fit!"; } int a=gsl_vector_fscanf(readvector,m); if(a!=0) throw "problem reading gsl_vector!"; fclose(readvector); }