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
00039 double dAsin(double x){
00040 return 1/sqrt(1-x*x);
00041 }
00042
00043 double ddAsin(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 Asin::Asin():UnaryOperator(){
00052 cName = "asin";
00053
00054 fcn = &asin;
00055 dfcn = &dAsin;
00056 ddfcn = &ddAsin;
00057
00058 operatorName = ON_ASIN;
00059
00060 }
00061
00062 Asin::Asin( Operator *_argument ):UnaryOperator(_argument){
00063 cName = "asin";
00064
00065 fcn = &asin;
00066 dfcn = &dAsin;
00067 ddfcn = &ddAsin;
00068
00069 operatorName = ON_ASIN;
00070 }
00071
00072
00073 Asin::Asin( const Asin &arg ):UnaryOperator(arg){
00074 cName = "asin";
00075
00076 fcn = &asin;
00077 dfcn = &dAsin;
00078 ddfcn = &ddAsin;
00079
00080 operatorName = ON_ASIN;
00081 }
00082
00083
00084 Asin::~Asin(){
00085
00086 }
00087
00088
00089 Asin& Asin::operator=( const Asin &arg ){
00090
00091 UnaryOperator::operator=(arg);
00092
00093 return *this;
00094 }
00095
00096
00097 returnValue Asin::evaluate( EvaluationBase *x ){
00098
00099 x->Asin(*argument);
00100 return SUCCESSFUL_RETURN;
00101 }
00102
00103
00104
00105 Operator* Asin::substitute( int index, const Operator *sub ){
00106
00107 return new Asin( argument->substitute( index , sub ) );
00108
00109 }
00110
00111 Operator* Asin::clone() const{
00112
00113 return new Asin(*this);
00114 }
00115
00116 returnValue Asin::initDerivative() {
00117
00118 if( initialized ) return SUCCESSFUL_RETURN;
00119 initialized = BT_TRUE;
00120
00121 derivative = convert2TreeProjection(
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 derivative2 = convert2TreeProjection(
00136 new Product(
00137 new Power(
00138 new Addition(
00139 new DoubleConstant(1.0 , NE_ONE),
00140 new Product(
00141 new DoubleConstant( -1.0, NE_NEITHER_ONE_NOR_ZERO),
00142 new Power_Int(
00143 argument->clone(),
00144 2
00145 )
00146 )
00147 ),
00148 new DoubleConstant( -1.5 , NE_NEITHER_ONE_NOR_ZERO )
00149 ),
00150 argument->clone()
00151 ));
00152
00153 return argument->initDerivative();
00154 }
00155
00156
00157 CLOSE_NAMESPACE_ACADO
00158
00159