Exemplo n.º 1
0
returnValue Product::AD_backward( int dim,
                                  VariableType *varType,
                                  int *component,
                                  Operator *seed,
                                  Operator **df         ){


    if( seed->isOneOrZero() != NE_ZERO ){

        TreeProjection tmp;
        tmp = *seed;

        argument1->AD_backward( dim, varType, component,
                                new Product(
                                    argument2->clone(),
                                    tmp.clone()
                                ),
                                df );

        argument2->AD_backward( dim, varType, component,
                                new Product(
                                    argument1->clone(),
                                    tmp.clone()
                                ),
                                df );
    }

    delete seed;
    return SUCCESSFUL_RETURN;
}
Exemplo n.º 2
0
returnValue Power::AD_backward( int dim,
                                VariableType *varType,
                                int *component,
                                Operator *seed,
                                Operator **df         ){

    if( seed->isOneOrZero() != NE_ZERO ){


        TreeProjection tmp;
        tmp = *seed;

        argument1->AD_backward( dim, varType, component,
                                new Product(
                                    argument2->clone(),
                                    new Product(
                                        new Power(
                                            argument1->clone(),
                                            new Addition(
                                                argument2->clone(),
                                                new DoubleConstant(-1.0, NE_NEITHER_ONE_NOR_ZERO)
                                            )
                                        ),
                                        tmp.clone()
                                    )
                                ),
                                df );

        argument2->AD_backward( dim, varType, component,
                                new Product(
                                    clone(),
                                    new Product(
                                        tmp.clone(),
                                        new Logarithm(
                                            argument1->clone()
                                        )
                                    )
                                ),
                                df );
    }

    delete seed;
    return SUCCESSFUL_RETURN;
}
Exemplo n.º 3
0
returnValue Subtraction::AD_backward( int dim,
                                      VariableType *varType,
                                      int *component,
                                      Operator *seed,
                                      Operator **df         ){

    TreeProjection tmp;
    tmp = *seed;

    argument1->AD_backward( dim, varType, component, tmp.clone(), df );

    if( seed->isOneOrZero() != NE_ZERO ){
        argument2->AD_backward( dim, varType, component,
                                new Subtraction( new DoubleConstant( 0.0 , NE_ZERO ), tmp.clone() ), df );
    }

    delete seed;
    return SUCCESSFUL_RETURN;
}