Esempio n. 1
0
adouble func_eval(adouble *x){
  adouble fad=0;
  x[0]=x[0]-x[1];
  x[1]=x[2]-x[1];
  condassign(fad,x[0],x[3]*x[4],x[4]*x[5]);
  condassign(x[0],x[1],x[2]*x[3],x[3]*x[4]);
  fad-=x[0]*x[3];
  condassign(x[1],x[5],x[2]+x[3]);
  fad/=x[1];
  return fad;
}
Esempio n. 2
0
adouble func_eval(adouble *x){
  adouble fad=0;
  advector adv(NUM_IND);
  adv[x[0]]=x[0];
  adv[x[1]]=x[1];
  adv[x[2]]=x[2];
  condassign(adv[x[3]],x[0]-x[1],x[0],(adouble)adv[x[1]]);
  condassign(adv[x[4]],x[2]-x[1],(adouble)adv[x[2]],(adouble)adv[x[3]]);
  condassign(adv[x[5]],x[3]-x[2],x[5]);
  adv[x[0]]+=cosh((adouble)adv[x[0]]);
  adv[x[1]]-=0.2;
  adv[x[1]-x[0]]=exp((adouble)adv[x[5]]);
  fad+=adv[0]*adv[1]*adv[2]*adv[3]*adv[4]*adv[5];
//  adv[x[0]]=adv[x[1]];
//  fad=adv[x[0]]+adv[x[2]];
  return fad;
}
Esempio n. 3
0
/*                                                          ADOUBLE ROUTINE */
adouble activeCubicLighthouse( adouble t ) {
    adouble p, q, d, r, u, u1, u2, v, a, b, c, z;
    /*---------------------*/
    p = tan(t);
    q = p - 0.2;
    p /= 3.0;
    d = q*q;
    d -= p*p*p;
    /* 1. branch ----------*/
    r = sqrt(d);
    u = q + r;
    u1 = pow(fabs(u),1.0/3.0);
    u2 = -u1;
    condassign(u,u,u1,u2);
    v = q - r;
    u1 = pow(fabs(v),1.0/3.0);
    u2 = -u1;
    condassign(v,v,u1,u2);
    c = u + v;
    /* 2. branch ----------*/
    p = fabs(p);
    p = sqrt(p);
    q /= p*p*p;
    a = acos(q);
    a /= 3.0;
    z = cos(a);
    b = a + PI/3.0;
    b = -cos(b);
    z = fmin(z,b);
    b = a - PI/3.0;
    b = -cos(b);
    z = fmin(z,b);
    z = 2.0*z*p;
    /*---------------------*/
    condassign(z,d,c);
    z += 2.0;
    return z;
}
Esempio n. 4
0
/*                                                          ADOUBLE ROUTINE */
adouble activeCubicLighthouse1( adouble t ) {
    adouble p, q, d, r, u, u1,u2, v, c;
    /*---------------------*/
    p = tan(t);
    q = p - 0.2;
    p /= 3.0;
    d = q*q;
    d -= p*p*p;
    /* 1. branch ----------*/
    r = sqrt(d);
    u = q + r;
    u1 = pow(fabs(u),1.0/3.0);
    u2 = -u1;
    condassign(u,u,u1,u2);
    v = q - r;
    u1 = pow(fabs(v),1.0/3.0);
    u2 = -u1;
    condassign(v,v,u1,u2);
    c = u + v;
    /*---------------------*/
    c += 2.0;
    return c;
}
Esempio n. 5
0
	inline adouble CondExpOp(
		enum  CppAD::CompareOp     cop ,
		const adouble            &left ,
		const adouble           &right ,
		const adouble        &trueCase ,
		const adouble       &falseCase )
	{	adouble result;
		switch( cop )
		{
			case CompareLt: // left < right
			condassign(result, right - left, trueCase, falseCase);
			break;

			case CompareLe: // left <= right
			condassign(result, left - right, falseCase, trueCase);
			break;

			case CompareEq: // left == right
			condassign(result, left - right, falseCase, trueCase);
			condassign(result, right - left, falseCase, result);
			break;

			case CompareGe: // left >= right
			condassign(result, right - left, falseCase, trueCase);
			break;

			case CompareGt: // left > right
			condassign(result, left - right, trueCase, falseCase);
			break;

			default:
			CppAD::ErrorHandler::Call(
				true     , __LINE__ , __FILE__ ,
				"CppAD::CondExp",
				"Error: for unknown reason."
			);
			result = trueCase;
		}
		return result;
	}
Esempio n. 6
0
inline adouble condExpGt(const adouble& left, const adouble& right,
                         const adouble& exp_if_true, const adouble& exp_if_false) {
    adouble temp;
    condassign(temp, left - right, exp_if_true, exp_if_false);
    return temp;
}
Esempio n. 7
0
inline adouble condExpLt(const adouble& left, const adouble& right,
                         const adouble& exp_if_true, const adouble& exp_if_false) {
    adouble temp;
    condassign(temp, right - left, exp_if_true, exp_if_false); // temp = (right - left>0)? exp_if_true: exp_if_false
    return temp;
}