void MLComputeTest::stdev_data() { QTest::addColumn<VD>("data"); QTest::addColumn<double>("result"); QTest::newRow("empty") << VD() << 0.0; QTest::newRow("single-zero") << VD({ 0 }) << 0.0; QTest::newRow("single-non-zero") << VD({ 1 }) << 0.0; QTest::newRow("integer") << VD({ 2, 4, 4, 4, 5, 5, 5, 7, 9 }) << 2.0; }
void MatrixRmn::ComputeInverse( MatrixRmn& R) const { assert ( this->NumRows==this->NumCols ); MatrixRmn U(this->NumRows, this->NumCols); VectorRn w(this->NumRows); MatrixRmn V(this->NumRows, this->NumCols); this->ComputeSVD(U, w, V); assert(this->DebugCheckSVD(U, w , V)); double PseudoInverseThresholdFactor = 0.01; double pseudoInverseThreshold = PseudoInverseThresholdFactor*w.MaxAbs(); MatrixRmn VD(this->NumRows, this->NumCols); MatrixRmn D(this->NumRows, this->NumCols); D.SetZero(); long diagLength = w.GetLength(); double* wPtr = w.GetPtr(); for ( long i = 0; i < diagLength; ++i ) { double alpha = *(wPtr++); if ( fabs(alpha)>pseudoInverseThreshold ) { D.Set(i, i, 1.0/alpha); } } Multiply(V,D,VD); MultiplyTranspose(VD,U,R); }
void MLComputeTest::mean_data() { QTest::addColumn<VD>("data"); QTest::addColumn<double>("result"); QTest::newRow("empty") << VD() << 0.0; QTest::newRow("single-zero") << VD({ 0 }) << 0.0; QTest::newRow("single-non-zero") << VD({ 1 }) << 1.0; QTest::newRow("same values") << VD({ 1, 1, 1, 1 }) << 1.0; QTest::newRow("opposite values") << VD({ 2, -2, 2, -2, 2, -2 }) << 0.0; QTest::newRow("integer") << VD({ 2, 4, 4, 4, 5, 5, 5, 7, 9 }) << 5.0; QTest::newRow("real") << VD({ 2.2, 4.7, 3.5, 4.1, 4.7, -5.2, 2.1, 0, -1, 0.9 }) << 1.6; }
void MLComputeTest::sum_data() { QTest::addColumn<QVector<double> >("data"); QTest::addColumn<double>("result"); QTest::newRow("empty") << VD() << 0.0; QTest::newRow("single") << VD({ 42 }) << 42.0; QTest::newRow("negative") << VD({ -42 }) << -42.0; QTest::newRow("multiple") << VD({ 24, 42 }) << 66.0; QTest::newRow("inverse") << VD({ 24, -24 }) << 0.0; QTest::newRow("progression") << VD({ 1, -2, 3, -4, 5, -6, 7, -8 }) << -4.0; }
void MLComputeTest::min_data() { QTest::addColumn<QVector<double> >("data"); QTest::addColumn<double>("result"); QTest::newRow("empty") << VD() << 0.0; QTest::newRow("single") << VD({ 42 }) << 42.0; QTest::newRow("negative") << VD({ -42 }) << -42.0; QTest::newRow("multi-different 1") << VD({ 24, 42 }) << 24.0; QTest::newRow("multi-different 2") << VD({ 42, 24 }) << 24.0; QTest::newRow("multi-same") << VD({ 42, 42 }) << 42.0; }
int user_data_get_grid (v5dstruct *v, int itime, int ivar, float *grid_data) { int i, ir, ic, il, nr, nc, nl; long ndat, noff, ltmp; char file_name[1000], *ptmp; float *dat; FILE *file; nr = v->Nr; nc = v->Nc; nl = v->Nl[ivar]; strcpy (file_name, user_file_name); if (strlen (file_name) == 0) return 0; ptmp = strrchr (file_name, '.'); if (ptmp == NULL) ptmp = file_name + strlen (file_name); sprintf (ptmp, "_%s.dat", v->VarName[ivar]); fprintf (stderr, "Reading user grid file %s\n", file_name); if ((file = fopen (file_name, "rb")) == NULL) return 0; ndat = nr * nc * nl; dat = (float *) malloc (ndat * sizeof (float)); if (dat == NULL) return 0; noff = ((ndat * sizeof (float)) + (2 * sizeof (long))) * itime; fseek (file, noff, SEEK_SET); fread (<mp, 1, sizeof (long), file); /* skip over reference time */ fread (<mp, 1, sizeof (long), file); /* skip over forecast time */ fread (dat, ndat, sizeof (float), file); #define VD(ROW, COL, LEV) grid_data[ (ROW) + (((COL) + (LEV) * nc) * nr) ] i = 0; for (il = 0; il < nl; il++) { for (ir = nr-1; ir >= 0; ir--) { for (ic = 0; ic < nc; ic++, i++) { if (dat[i] == -99999.0) dat[i] = MISSING; VD(ir, ic, il) = dat[i]; } } } free (dat); return 1; }
void MLComputeTest::dotProduct_data() { QTest::addColumn<QVector<double> >("data1"); QTest::addColumn<QVector<double> >("data2"); QTest::addColumn<double>("result"); QTest::newRow("empty") << VD() << VD() << 0.0; QTest::newRow("first-empty") << VD() << VD({ 0 }) << 0.0; QTest::newRow("second-empty") << VD({ 0 }) << VD() << 0.0; QTest::newRow("diff-size") << VD({ 1 }) << VD({ 1, 2, 3, 4 }) << 0.0; QTest::newRow("zero") << VD({ 0 }) << VD({ 0 }) << 0.0; QTest::newRow("first-zero") << VD({ 0, 0, 0 }) << VD({ 1, 2, 3 }) << 0.0; QTest::newRow("square") << VD({ 1, 1, 1 }) << VD({ 1, 1, 1 }) << 3.0; }