IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 26418


Ignore:
Timestamp:
Dec 15, 2009, 6:15:25 PM (16 years ago)
Author:
eugene
Message:

add some matrix math operations and fix svd

Location:
branches/eam_branches/20091201/Ohana/src/opihi
Files:
4 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20091201/Ohana/src/opihi/cmd.data/Makefile

    r25757 r26418  
    6969$(SRC)/load.$(ARCH).o           \
    7070$(SRC)/lookup.$(ARCH).o \
     71$(SRC)/matrix.$(ARCH).o \
    7172$(SRC)/mkrgb.$(ARCH).o  \
    7273$(SRC)/mcreate.$(ARCH).o        \
  • branches/eam_branches/20091201/Ohana/src/opihi/cmd.data/init.c

    r25757 r26418  
    5858int load             PROTO((int, char **));
    5959int lookup           PROTO((int, char **));
     60int matrix           PROTO((int, char **));
    6061int mkrgb            PROTO((int, char **));
    6162int mcreate          PROTO((int, char **));
     
    195196  {1, "minterp",      minterp,          "interpolate image pixels"},
    196197  {1, "iminterp",     minterp,          "interpolate image pixels"},
     198  {1, "matrix",       matrix,           "matrix math operations"},
    197199  {1, "mkrgb",        mkrgb,            "convert 3 images to rgb jpeg (use Kapa for better control)"},
    198200  {1, "mset",         mset,             "insert a vector in an image"},
  • branches/eam_branches/20091201/Ohana/src/opihi/cmd.data/svd.c

    r20936 r26418  
    5757  /* use a bcopy instead? */
    5858
     59  // try C.R. Bond's version -- requires matrices in the form A[row][col] not A[row*Ncol + col]
     60  if (1) {
     61      int j;
     62      double **a, **u, **v, *q;
     63      ALLOCATE (a, double *, Ny);
     64      ALLOCATE (u, double *, Ny);
     65      ALLOCATE (v, double *, Ny);
     66      for (i = 0; i < Ny; i++) {
     67          ALLOCATE (a[i], double, Nx);
     68          ALLOCATE (u[i], double, Nx);
     69          ALLOCATE (v[i], double, Nx);
     70      }   
     71      ALLOCATE (q, double, Nx);
     72
     73      for (j = 0; j < Ny; j++) {
     74          for (i = 0; i < Nx; i++) {
     75              a[j][i] = A[j*Nx + i];
     76              u[j][i] = 0;
     77              v[j][i] = 0;
     78          }
     79      }
     80      for (i = 0; i < Nx; i++) {
     81          q[i] = 0;
     82      }
     83
     84      status = svdcmp_bond_raw (Ny, Nx, 1, 1, FLT_EPSILON, 1e-6, a, q, u, v);
     85      fprintf (stderr, "status: %d\n", status);
     86
     87      // copy u q v back to U W V:
     88      for (j = 0; j < Ny; j++) {
     89          for (i = 0; i < Nx; i++) {
     90              U[j*Nx + i] = u[j][i];
     91              V[j*Nx + i] = v[j][i];
     92          }
     93      }
     94      for (i = 0; i < Nx; i++) {
     95          W[i] = q[i];
     96      }
     97
     98      for (j = 0; j < Ny; j++) {
     99          free(a[j]);
     100          free(u[j]);
     101          free(v[j]);
     102      }
     103      free (a);
     104      free (u);
     105      free (v);
     106      free (q);
     107
     108      return TRUE;
     109  }
     110
    59111  status = svdcmp (U, W, V, Nx, Ny);
    60112  if (!status) {
  • branches/eam_branches/20091201/Ohana/src/opihi/include/data.h

    r26258 r26418  
    8989int svdcmp (float *a, opihi_flt *w, float *v, int Nx, int Ny);
    9090
     91/* in svdcmp_bond_raw.c */
     92int svdcmp_bond_raw(int m, int n, int withu, int withv, double eps, double tol, double **a, double *q, double **u, double **v);
     93
    9194/* mrqmin.c */
    9295opihi_flt mrqcof (opihi_flt *x, opihi_flt *y, opihi_flt *dy, int Npts,
Note: See TracChangeset for help on using the changeset viewer.