Пример #1
0
void main() {
	float colY[9], colH[9];
	float y[3][3] = {{4, 5, 2}, {3, 9, 10}, {4, 5, 0.5}};
	float h[3][3] = {{5, 6, 9}, {10, 12, 13}, {1, 1, 1}};
	colVec(3, 3, y, colY);
	colVec(3, 3, h, colH);
	float totalSum = 48;
	float precision = 0.01;
	int length = 9;
	float X[9];
	exactTotalSum(length, colY, colH, totalSum, precision, X);
	printMatrix(X, 9, 1);

}
Пример #2
0
void rspfFilter::createMatrix(NEWMAT::Matrix& m,
                               long width,
                               double middle,
                               double scale)const
{
   NEWMAT::ColumnVector colVec(width);
   NEWMAT::RowVector    rowVec(width);

   double t = 0.0;
   double val = 0.0;
   if(width == 1)
   {
      t = 0;
      val = filter(t, getSupport());
      colVec[0] = val;
      rowVec[0] = val;
   }
   else
   {
      for(long index = 0; index < width; index++)
      {
         t = (double)index/(double)(width-1);
         t = middle + (t - .5)*scale;
         val = filter(t, getSupport());
         colVec[index] = val;
         rowVec[index] = val;
      }
   }

   // do the outer product to construct the
   // filter matrix
   m = colVec * rowVec;
}
Пример #3
0
  /* Debugging utility to check if columns have been Inserted into the 
   * matrix that do not correspond to a row on any processor
   */
  void check_for_rogue_columns( Epetra_CrsMatrix& mat) {
    // Set up rowVector of 0s and column vector of 1s
    const Epetra_Map& rowMap = mat.RowMap();
    const Epetra_Map& colMap = mat.ColMap();
    Epetra_Vector rowVec(rowMap); rowVec.PutScalar(0.0);
    Epetra_Vector colVec(colMap); colVec.PutScalar(1.0);
    Epetra_Import importer(colMap, rowMap);

    // Overwrite colVec 1s with rowVec 0s 
    colVec.Import(rowVec, importer, Insert);

    // Check that all 1s have been overwritten
    double nrm=0.0;
    colVec.Norm1(&nrm); // nrm = number of columns not overwritten by rows

    // If any rogue columns, exit now (or just get nans later)
    if (nrm>=1.0) {
      *out << "ERROR: Column map has " << nrm 
           << " rogue entries that are not associated with any row." << endl;
       rowMap.Comm().Barrier();
       exit(-3);
    }
  }
Пример #4
0
/**
 * @author      JIA Pei
 * @version     2010-02-22
 * @brief       Generate all types of window functions
 * @param       windowSize      Input    -- the window size
 * @param       windowFunc      Output    -- the window function
 * @return      Mat_<float>     return 
 */
cv::Mat_<float> VO_WindowFunc::VO_GenerateWindowFunc(cv::Size windowSize, unsigned int windowFunc)
{
    cv::Mat_<float> resMat = cv::Mat_<float>::ones(windowSize);
    cv::Mat_<float> rowVec = cv::Mat_<float>::ones(1, windowSize.width);
    cv::Mat_<float> colVec = cv::Mat_<float>::ones(windowSize.height, 1);

    switch(windowFunc)
    {
        case HAMMING:
        {
            double a = 2.0 * CV_PI / (windowSize.width - 1.0);
            for(unsigned int i = 0; i < windowSize.width; ++i)
                rowVec(0, i)    = 0.53836 - 0.46164 * cos(a*i);
            double b = 2.0 * CV_PI / (windowSize.height - 1.0);
            for(unsigned int i = 0; i < windowSize.height; ++i)
                colVec(i, 0)    = 0.53836 - 0.46164 * cos(b*i);
            resMat = colVec*rowVec;
        }
        break;
        case HANN:
        {
            double a = 2.0 * CV_PI / (windowSize.width - 1.0);
            for(unsigned int i = 0; i < windowSize.width; ++i)
                rowVec(0, i)    = 0.5 * (1.0 - cos(a*i));
            double b = 2.0 * CV_PI / (windowSize.height - 1.0);
            for(unsigned int i = 0; i < windowSize.height; ++i)
                colVec(i, 0)    = 0.5 * (1.0 - cos(b*i));
            resMat = colVec*rowVec;
        }
        break;
        case TUKEY:
        break;        
        case COSINE:
        {
            double a = CV_PI / (windowSize.width - 1.0);
            for(unsigned int i = 0; i < windowSize.width; ++i)
                rowVec(0, i)    = sin(a*i);
            double b = CV_PI / (windowSize.height - 1.0);
            for(unsigned int i = 0; i < windowSize.height; ++i)
                colVec(i, 0)    = sin(b*i);
            resMat = colVec*rowVec;
        }
        break;
        case LANCZOS:
        break;
        case BARTLETT:
        break;
        case TRIANGULAR:
        break;
        case GAUSS:
        {
        }
        break;
        case BARTLETTHANN:
        break;
        case BLACKMAN:
        break;
        case KAISER:
        break;        
        case NUTTALL:
        break;
        case BLACKMANHARRIS:
        break;
        case BLACKMANNUTTALL:
        break;
        case FLATTOP:
        break;
        case BESSEL:
        break;        
        case DOLPHCHEBYSHEV:
        break;
        case EXPONENTIAL:
        break;
        case RIFEVINCENT:
        break;
        case GABOR:
        break;
        case RECTANGULAR:
        default:
        {
            for(unsigned int i = 0; i < windowSize.width; ++i)
                for(unsigned int j = 0; j < windowSize.height; ++j)
                    resMat(i, j) = 1.0f;
        }
        break;
    }
    
    return resMat;
}