T libDHStandard<T, B, S>::ComputeFandG(std::vector<T> *theta, std::vector<T> *empiricalMeans, std::vector<T> *grad, int) { T dual = ComputeFandGSpecial(i2t<B>(), theta, grad, 1, DHParams->CRFMPIterations); for(size_t r=0;r<NumFeatures;++r) { dual += DHParams->C/DHParams->p*pow(fabs((*theta)[r]),DHParams->p); dual -= (*theta)[r]*(*empiricalMeans)[r]; if(grad!=NULL) { (*grad)[r] += (DHParams->C*pow(fabs((*theta)[r]), DHParams->p-1)*sign2((*theta)[r]) - (*empiricalMeans)[r]); } } return dual; }
int rotg( // VALUE& sa, // VALUE& sb, // VALUE& c, // VALUE& s) // { VALUE r, roe, scale, z; roe = sb; if (Abs(sa) > Abs(sb)) { roe = sa; } scale = Abs(sa) + Abs(sb); if (scale == 0.0) { c = 1.0; s = 0.0; r = 0.0; z = 0.0; } else { r = scale * sqrt( (sa / scale) * (sa / scale) + (sb / scale) * (sb / scale)); r = sign2(roe) * r; c = sa / r; s = sb / r; z = 1.0; if (Abs(sa) > Abs(sb)) { z = s; } if (Abs(sb) > Abs(sa) && c != 0.0) { z = 1.0 / c; } } sa = r; sb = z; return 1; } // << -------------------------------------------