|
Packit |
67cb25 |
#include <stdio.h>
|
|
Packit |
67cb25 |
#include <stdlib.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include <gsl/gsl_spmatrix.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
main()
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
gsl_spmatrix *A = gsl_spmatrix_alloc(5, 4); /* triplet format */
|
|
Packit |
67cb25 |
gsl_spmatrix *B, *C;
|
|
Packit |
67cb25 |
size_t i, j;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* build the sparse matrix */
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 0, 2, 3.1);
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 0, 3, 4.6);
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 1, 0, 1.0);
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 1, 2, 7.2);
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 3, 0, 2.1);
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 3, 1, 2.9);
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 3, 3, 8.5);
|
|
Packit |
67cb25 |
gsl_spmatrix_set(A, 4, 0, 4.1);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("printing all matrix elements:\n");
|
|
Packit |
67cb25 |
for (i = 0; i < 5; ++i)
|
|
Packit |
67cb25 |
for (j = 0; j < 4; ++j)
|
|
Packit |
67cb25 |
printf("A(%zu,%zu) = %g\n", i, j,
|
|
Packit |
67cb25 |
gsl_spmatrix_get(A, i, j));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* print out elements in triplet format */
|
|
Packit |
67cb25 |
printf("matrix in triplet format (i,j,Aij):\n");
|
|
Packit |
67cb25 |
gsl_spmatrix_fprintf(stdout, A, "%.1f");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* convert to compressed column format */
|
|
Packit |
67cb25 |
B = gsl_spmatrix_ccs(A);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("matrix in compressed column format:\n");
|
|
Packit |
67cb25 |
printf("i = [ ");
|
|
Packit |
67cb25 |
for (i = 0; i < B->nz; ++i)
|
|
Packit |
67cb25 |
printf("%zu, ", B->i[i]);
|
|
Packit |
67cb25 |
printf("]\n");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("p = [ ");
|
|
Packit |
67cb25 |
for (i = 0; i < B->size2 + 1; ++i)
|
|
Packit |
67cb25 |
printf("%zu, ", B->p[i]);
|
|
Packit |
67cb25 |
printf("]\n");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("d = [ ");
|
|
Packit |
67cb25 |
for (i = 0; i < B->nz; ++i)
|
|
Packit |
67cb25 |
printf("%g, ", B->data[i]);
|
|
Packit |
67cb25 |
printf("]\n");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* convert to compressed row format */
|
|
Packit |
67cb25 |
C = gsl_spmatrix_crs(A);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("matrix in compressed row format:\n");
|
|
Packit |
67cb25 |
printf("i = [ ");
|
|
Packit |
67cb25 |
for (i = 0; i < C->nz; ++i)
|
|
Packit |
67cb25 |
printf("%zu, ", C->i[i]);
|
|
Packit |
67cb25 |
printf("]\n");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("p = [ ");
|
|
Packit |
67cb25 |
for (i = 0; i < C->size1 + 1; ++i)
|
|
Packit |
67cb25 |
printf("%zu, ", C->p[i]);
|
|
Packit |
67cb25 |
printf("]\n");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf("d = [ ");
|
|
Packit |
67cb25 |
for (i = 0; i < C->nz; ++i)
|
|
Packit |
67cb25 |
printf("%g, ", C->data[i]);
|
|
Packit |
67cb25 |
printf("]\n");
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_spmatrix_free(A);
|
|
Packit |
67cb25 |
gsl_spmatrix_free(B);
|
|
Packit |
67cb25 |
gsl_spmatrix_free(C);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return 0;
|
|
Packit |
67cb25 |
}
|