Esempio n. 1
0
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();
}
Esempio n. 2
0
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();
}
Esempio n. 3
0
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();
}
Esempio n. 4
0
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();
}