Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00035 #include <acado/utils/acado_utils.hpp>
00036 #include <acado/symbolic_operator/symbolic_operator.hpp>
00037
00038 double dAcos(double x){
00039 return -1/sqrt(1-x*x);
00040 }
00041
00042
00043 double ddAcos(double x){
00044 double v1 = sqrt(1-x*x);
00045 return 2*x*(-0.5/v1/v1/v1);
00046 }
00047
00048 BEGIN_NAMESPACE_ACADO
00049
00050
00051 Acos::Acos():UnaryOperator(){
00052 cName = "acos";
00053
00054 fcn = &acos;
00055 dfcn = &dAcos;
00056 ddfcn = &ddAcos;
00057
00058 operatorName = ON_ACOS;
00059
00060 }
00061
00062 Acos::Acos( Operator *_argument ):UnaryOperator(_argument){
00063 cName = "acos";
00064
00065 fcn = &acos;
00066 dfcn = &dAcos;
00067 ddfcn = &ddAcos;
00068
00069 operatorName = ON_ACOS;
00070 }
00071
00072
00073 Acos::Acos( const Acos &arg ):UnaryOperator(arg){
00074 cName = "acos";
00075
00076 fcn = &acos;
00077 dfcn = &dAcos;
00078 ddfcn = &ddAcos;
00079
00080 operatorName = ON_ACOS;
00081 }
00082
00083
00084 Acos::~Acos(){
00085
00086 }
00087
00088
00089 Acos& Acos::operator=( const Acos &arg ){
00090
00091 UnaryOperator::operator=(arg);
00092
00093 return *this;
00094 }
00095
00096
00097 returnValue Acos::evaluate( EvaluationBase *x ){
00098
00099 x->Acos(*argument);
00100 return SUCCESSFUL_RETURN;
00101 }
00102
00103
00104 Operator* Acos::substitute( int index, const Operator *sub ){
00105
00106 return new Acos( argument->substitute( index , sub ) );
00107
00108 }
00109
00110 Operator* Acos::clone() const{
00111
00112 return new Acos(*this);
00113 }
00114
00115 returnValue Acos::initDerivative() {
00116
00117 if( initialized ) return SUCCESSFUL_RETURN;
00118 initialized = BT_TRUE;
00119
00120 derivative = convert2TreeProjection(
00121 new Product( new DoubleConstant( -1.0 , NE_NEITHER_ONE_NOR_ZERO ),
00122 new Power(
00123 new Addition(
00124 new DoubleConstant(1.0 , NE_ONE),
00125 new Product(
00126 new DoubleConstant( -1.0, NE_NEITHER_ONE_NOR_ZERO),
00127 new Power_Int(
00128 argument->clone(),
00129 2
00130 )
00131 )
00132 ),
00133 new DoubleConstant( -0.5 , NE_NEITHER_ONE_NOR_ZERO )
00134 )
00135 ));
00136 derivative2 = convert2TreeProjection(
00137 new Product( new DoubleConstant( -1.0 , NE_NEITHER_ONE_NOR_ZERO ),
00138 new Product(
00139 new Power(
00140 new Addition(
00141 new DoubleConstant(1.0 , NE_ONE),
00142 new Product(
00143 new DoubleConstant( -1.0, NE_NEITHER_ONE_NOR_ZERO),
00144 new Power_Int(
00145 argument->clone(),
00146 2
00147 )
00148 )
00149 ),
00150 new DoubleConstant( -1.5 , NE_NEITHER_ONE_NOR_ZERO )
00151 ),
00152 argument->clone()
00153 )
00154 ));
00155
00156 return argument->initDerivative();
00157 }
00158
00159
00160 CLOSE_NAMESPACE_ACADO
00161
00162