gsl_matrix_hconcat(const gsl_matrix * A,const gsl_matrix * B)1 gsl_matrix *gsl_matrix_hconcat(const gsl_matrix *A,
2 							   const gsl_matrix *B) {
3 	int colsA, colsB, rows;
4 	gsl_matrix_view Aview, Bview;
5 	gsl_matrix *C;
6 
7 	if (A->size1 != B->size1) return NULL;
8 	rows = A->size1;
9 	colsA = A->size2;
10 	colsB = B->size2;
11 
12 	C = gsl_matrix_alloc( rows, colsA + colsB);
13 	if (!C) return NULL;
14 
15 	Aview = gsl_matrix_submatrix(C, 0, 0, rows, colsA);
16 	Bview = gsl_matrix_submatrix(C, 0, colsA, rows, colsB);
17 
18 	gsl_matrix_memcpy(&Aview.matrix, A);
19 	gsl_matrix_memcpy(&Bview.matrix, B);
20 
21 	return C;
22 }
23 
gsl_matrix_vconcat(const gsl_matrix * A,const gsl_matrix * B)24 gsl_matrix *gsl_matrix_vconcat(const gsl_matrix *A,
25 	                           const gsl_matrix *B) {
26 	int cols, rowsA, rowsB;
27 	gsl_matrix_view Aview, Bview;
28 	gsl_matrix *C;
29 
30 	if (A->size2 != B->size2) return NULL;
31 	cols = A->size2;
32 	rowsA = A->size1;
33 	rowsB = B->size1;
34 
35 	C = gsl_matrix_alloc( rowsA + rowsB, cols);
36 	if (!C) return NULL;
37 
38 	Aview = gsl_matrix_submatrix(C, 0, 0, rowsA, cols);
39 	Bview = gsl_matrix_submatrix(C, rowsA, 0, rowsB, cols);
40 
41 	gsl_matrix_memcpy(&Aview.matrix, A);
42 	gsl_matrix_memcpy(&Bview.matrix, B);
43 
44 	return C;
45 }
46 
gsl_matrix_random(const gsl_matrix * A)47 void gsl_matrix_random(const gsl_matrix *A){
48 	int i, j, rows, cols;
49 	rows = A->size1;
50 	cols = A->size2;
51 
52 	for( i = 0; i < rows; i++)
53 		for( j = 0; j < cols; j++ )
54 			gsl_matrix_set (A, i, j, ((float)rand() / RAND_MAX));
55 
56 }
57 
58 
59