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); }
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; }
/* 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); } }
/** * @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; }