home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / math / ols / misc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-28  |  2.5 KB  |  138 lines

  1. /*
  2.     unclassifiables.
  3. */
  4.  
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include "utils.h"
  8. #include "matrix.h"
  9.  
  10. #ifdef TESTING
  11. int 
  12. main ()
  13. {
  14.   float **A;
  15.   int i, j;
  16.  
  17.   A = matrix (1, 2, 1, 5);
  18.   for (i = 1; i <= 2; i++)
  19.     for (j = 1; j <= 5; j++)
  20.       A[i][j] = (float) i *j;
  21.   printf ("Testing PrintMatrix: \n");
  22.   PrintMatrix (A, 2, 5, " %5.2f ");
  23.   printf ("\nwith a different format:\n");
  24.   PrintMatrix (A, 2, 5, " %7.0f ");
  25.  
  26.   return 0;
  27. }
  28.  
  29. #endif /* TESTING */
  30.  
  31. void 
  32. PrintMatrix (float **M, int rows, int cols, char *fmt)
  33. {
  34.   int i, j;
  35.  
  36.   printf ("PrintMatrix: %d rows and %d columns.\n", rows, cols);
  37.   for (i = 1; i <= rows; i++)
  38.     {
  39.       for (j = 1; j <= cols; j++)
  40.     printf (fmt, M[i][j]);
  41.       printf ("\n");
  42.     }
  43. }
  44.  
  45. void 
  46. d_PrintMatrix (double **M, int rows, int cols, char *fmt)
  47. {
  48.   int i, j;
  49.  
  50.   printf ("d_PrintMatrix: %d rows and %d columns.\n", rows, cols);
  51.   for (i = 1; i <= rows; i++)
  52.     {
  53.       for (j = 1; j <= cols; j++)
  54.     printf (fmt, M[i][j]);
  55.       printf ("\n");
  56.     }
  57. }
  58.  
  59. void 
  60. Transpose (float **A, int n)    /* Transpose A, which is n x n floats */
  61. {
  62.   int i, j;
  63.   float tmp;
  64.  
  65.   for (i = 1; i <= n; i++)
  66.     for (j = (i + 1); j <= n; j++)
  67.       {
  68.     tmp = A[i][j];
  69.     A[i][j] = A[j][i];
  70.     A[j][i] = tmp;
  71.       }
  72. }
  73.  
  74. void 
  75. d_Transpose (double **A, int n)    /* Transpose A, which is n x n doubles */
  76. {
  77.   int i, j;
  78.   double tmp;
  79.  
  80.   for (i = 1; i <= n; i++)
  81.     for (j = (i + 1); j <= n; j++)
  82.       {
  83.     tmp = A[i][j];
  84.     A[i][j] = A[j][i];
  85.     A[j][i] = tmp;
  86.       }
  87. }
  88.  
  89. void 
  90.   CopyMatrix (double **A, double **B, int rows, int cols)
  91. {
  92.   int i, j;
  93.   for (i = 1; i <= rows; i++)
  94.     for (j = 1; j <= cols; j++)
  95.       B[i][j] = A[i][j];
  96. }
  97.  
  98. void 
  99.   CopyVector (double *x, double *y, int K)
  100. {
  101.   int i;
  102.   for (i = 1; i <= K; i++)
  103.     y[i] = x[i];
  104. }
  105.  
  106. void 
  107.   RandomSym (double **A, int K, int *seed)
  108.      /* This routine generates a random square symmetric matrix
  109.     of size K x K. */
  110. {
  111.   int row, col;
  112.   for (row = 1; row <= K; row++)
  113.     for (col = 1; col <= row; col++)
  114.       A[row][col] = A[col][row] = 5.0 * ran1 (seed);
  115. }
  116.  
  117. void 
  118.   RandomMatrix (double **A, int rows, int cols, int *seed)
  119.      /* This routine fills A (rows, cols) with random numbers. */
  120. {
  121.   int i, j;
  122.  
  123.   for (i = 1; i <= rows; i++)
  124.     for (j = 1; j <= rows; j++)
  125.       A[i][j] = 5.0 * ran1 (seed);
  126. }
  127.  
  128. double 
  129.   trace (double **A, int N)
  130. {
  131.   double sum;
  132.   int i;
  133.  
  134.   for (sum = 0.0, i = 1; i <= N; i++)
  135.     sum += A[i][i];
  136.   return sum;
  137. }
  138.