File: Matrix.c

package info (click to toggle)
libmath-gsl-perl 0.45-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 192,156 kB
  • sloc: ansic: 895,524; perl: 24,682; makefile: 12
file content (58 lines) | stat: -rw-r--r-- 1,294 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
gsl_matrix *gsl_matrix_hconcat(const gsl_matrix *A,
							   const gsl_matrix *B) {
	int colsA, colsB, rows;
	gsl_matrix_view Aview, Bview;
	gsl_matrix *C;

	if (A->size1 != B->size1) return NULL;
	rows = A->size1;
	colsA = A->size2;
	colsB = B->size2;

	C = gsl_matrix_alloc( rows, colsA + colsB);
	if (!C) return NULL;

	Aview = gsl_matrix_submatrix(C, 0, 0, rows, colsA);
	Bview = gsl_matrix_submatrix(C, 0, colsA, rows, colsB);

	gsl_matrix_memcpy(&Aview.matrix, A);
	gsl_matrix_memcpy(&Bview.matrix, B);

	return C;
}

gsl_matrix *gsl_matrix_vconcat(const gsl_matrix *A,
	                           const gsl_matrix *B) {
	int cols, rowsA, rowsB;
	gsl_matrix_view Aview, Bview;
	gsl_matrix *C;

	if (A->size2 != B->size2) return NULL;
	cols = A->size2;
	rowsA = A->size1;
	rowsB = B->size1;

	C = gsl_matrix_alloc( rowsA + rowsB, cols);
	if (!C) return NULL;

	Aview = gsl_matrix_submatrix(C, 0, 0, rowsA, cols);
	Bview = gsl_matrix_submatrix(C, rowsA, 0, rowsB, cols);

	gsl_matrix_memcpy(&Aview.matrix, A);
	gsl_matrix_memcpy(&Bview.matrix, B);

	return C;
}

void gsl_matrix_random(const gsl_matrix *A){
	int i, j, rows, cols;
	rows = A->size1;
	cols = A->size2;

	for( i = 0; i < rows; i++)
		for( j = 0; j < cols; j++ )
			gsl_matrix_set (A, i, j, ((float)rand() / RAND_MAX));

}