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;
}
Exemple #2
0
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;
} // << -------------------------------------------