returnValue Logarithm::initDerivative() { if( derivative != 0 && derivative2 != 0 ) return SUCCESSFUL_RETURN; derivative = convert2TreeProjection(new Power_Int( argument->clone(), -1 )); derivative2 = convert2TreeProjection(new Product( new DoubleConstant( -1.0 , NE_NEITHER_ONE_NOR_ZERO ), new Power_Int( argument->clone(), -2 ) )); return argument->initDerivative(); }
returnValue Tan::initDerivative() { if( derivative != 0 && derivative2 != 0 ) return SUCCESSFUL_RETURN; derivative = convert2TreeProjection(new Quotient( new DoubleConstant( 1.0 , NE_ONE ), new Power_Int( new Cos( argument->clone() ), 2 ) )); derivative2 = convert2TreeProjection(new Quotient( new Product( new DoubleConstant( 2.0 , NE_NEITHER_ONE_NOR_ZERO ), new Tan(argument->clone()) ), new Power_Int( new Cos( argument->clone() ), 2 ) )); return argument->initDerivative(); }
returnValue Acos::initDerivative() { if( initialized ) return SUCCESSFUL_RETURN; initialized = BT_TRUE; derivative = convert2TreeProjection( new Product( new DoubleConstant( -1.0 , NE_NEITHER_ONE_NOR_ZERO ), new Power( new Addition( new DoubleConstant(1.0 , NE_ONE), new Product( new DoubleConstant( -1.0, NE_NEITHER_ONE_NOR_ZERO), new Power_Int( argument->clone(), 2 ) ) ), new DoubleConstant( -0.5 , NE_NEITHER_ONE_NOR_ZERO ) ) )); derivative2 = convert2TreeProjection( new Product( new DoubleConstant( -1.0 , NE_NEITHER_ONE_NOR_ZERO ), new Product( new Power( new Addition( new DoubleConstant(1.0 , NE_ONE), new Product( new DoubleConstant( -1.0, NE_NEITHER_ONE_NOR_ZERO), new Power_Int( argument->clone(), 2 ) ) ), new DoubleConstant( -1.5 , NE_NEITHER_ONE_NOR_ZERO ) ), argument->clone() ) )); return argument->initDerivative(); }
returnValue Power::initDerivative() { if( initialized ) return SUCCESSFUL_RETURN; initialized = BT_TRUE; Operator *oneTmp = new DoubleConstant(1.0, NE_ONE); Operator *subTmp = mySubtract( argument2, oneTmp ); derivative01 = convert2TreeProjection(myPower( argument1, subTmp)); derivative02 = convert2TreeProjection(myLogarithm( argument1 )); derivative12 = convert2TreeProjection(myProd( derivative01, argument2 )); Operator *twoTmp = new DoubleConstant(2.0,NE_NEITHER_ONE_NOR_ZERO); Operator *subTmp2 = mySubtract( argument2, twoTmp ); Operator *prodTmp = myProd( argument2, subTmp ); Operator *prodTmp2 = myProd( argument2, derivative02 ); Operator *addTmp = myAdd( oneTmp, prodTmp2 ); derivative21 = convert2TreeProjection(myPower( argument1, subTmp2)); derivative22 = convert2TreeProjection(myProd( prodTmp, derivative21 )); derivative23 = convert2TreeProjection(myProd( derivative01, addTmp )); delete oneTmp; delete subTmp; delete twoTmp; delete subTmp2; delete prodTmp; delete prodTmp2; delete addTmp; argument1->initDerivative(); return argument2->initDerivative(); }