PageRenderTime 38ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/rel-1-3-29/SWIG/Examples/guile/matrix/matrix.c

#
C | 61 lines | 38 code | 22 blank | 1 comment | 8 complexity | a43c7a26c16911b1084e60b63692d1f5 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1. /* FILE : matrix.c : some simple 4x4 matrix operations */
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. double **new_matrix() {
  5. int i;
  6. double **M;
  7. M = (double **) malloc(4*sizeof(double *));
  8. M[0] = (double *) malloc(16*sizeof(double));
  9. for (i = 0; i < 4; i++) {
  10. M[i] = M[0] + 4*i;
  11. }
  12. return M;
  13. }
  14. void destroy_matrix(double **M) {
  15. free(M[0]);
  16. free(M);
  17. }
  18. void print_matrix(double **M) {
  19. int i,j;
  20. for (i = 0; i < 4; i++) {
  21. for (j = 0; j < 4; j++) {
  22. printf("%10g ", M[i][j]);
  23. }
  24. printf("\n");
  25. }
  26. }
  27. void mat_mult(double **m1, double **m2, double **m3) {
  28. int i,j,k;
  29. double temp[4][4];
  30. for (i = 0; i < 4; i++)
  31. for (j = 0; j < 4; j++) {
  32. temp[i][j] = 0;
  33. for (k = 0; k < 4; k++)
  34. temp[i][j] += m1[i][k]*m2[k][j];
  35. }
  36. for (i = 0; i < 4; i++)
  37. for (j = 0; j < 4; j++)
  38. m3[i][j] = temp[i][j];
  39. }