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
00034 #include <acado/utils/acado_utils.hpp>
00035 #include <acado/matrix_vector/matrix_vector.hpp>
00036 #include <acado/symbolic_expression/symbolic_expression.hpp>
00037 #include <acado/function/function_.hpp>
00038 #include <acado/function/differential_equation.hpp>
00039 #include <acado/integrator/integrator.hpp>
00040 #include <acado/integrator/integrator_runge_kutta.hpp>
00041 #include <acado/integrator/integrator_runge_kutta78.hpp>
00042
00043
00044
00045
00046 BEGIN_NAMESPACE_ACADO
00047
00048
00049
00050
00051
00052
00053 IntegratorRK78::IntegratorRK78( )
00054 :IntegratorRK(13,0.1428571428571428571){
00055
00056 if( A != 0 ) initializeButcherTableau();
00057 }
00058
00059 IntegratorRK78::IntegratorRK78( const DifferentialEquation &rhs_ )
00060 :IntegratorRK(rhs_,13,0.1428571428571428571){
00061
00062 if( A != 0 ) initializeButcherTableau();
00063 }
00064
00065 IntegratorRK78::IntegratorRK78( const IntegratorRK78& arg )
00066 :IntegratorRK(arg){ }
00067
00068 IntegratorRK78::~IntegratorRK78( ){ }
00069
00070 IntegratorRK78& IntegratorRK78::operator=( const IntegratorRK78& arg ){
00071
00072 if( this != &arg ){
00073 IntegratorRK::operator=(arg);
00074 }
00075 return *this;
00076 }
00077
00078 Integrator* IntegratorRK78::clone() const{
00079
00080 return new IntegratorRK78(*this);
00081 }
00082
00083
00084 void IntegratorRK78::initializeButcherTableau(){
00085
00086 A[0][ 0] = 0.0;
00087 A[0][ 1] = 0.0;
00088 A[0][ 2] = 0.0;
00089 A[0][ 3] = 0.0;
00090 A[0][ 4] = 0.0;
00091 A[0][ 5] = 0.0;
00092 A[0][ 6] = 0.0;
00093 A[0][ 7] = 0.0;
00094 A[0][ 8] = 0.0;
00095 A[0][ 9] = 0.0;
00096 A[0][10] = 0.0;
00097 A[0][11] = 0.0;
00098 A[0][12] = 0.0;
00099
00100 A[1][ 0] = 1.0/18.0;
00101 A[1][ 1] = 0.0;
00102 A[1][ 2] = 0.0;
00103 A[1][ 3] = 0.0;
00104 A[1][ 4] = 0.0;
00105 A[1][ 5] = 0.0;
00106 A[1][ 6] = 0.0;
00107 A[1][ 7] = 0.0;
00108 A[1][ 8] = 0.0;
00109 A[1][ 9] = 0.0;
00110 A[1][10] = 0.0;
00111 A[1][11] = 0.0;
00112 A[1][12] = 0.0;
00113
00114 A[2][ 0] = 1.0/48.0;
00115 A[2][ 1] = 1.0/16.0;
00116 A[2][ 2] = 0.0;
00117 A[2][ 3] = 0.0;
00118 A[2][ 4] = 0.0;
00119 A[2][ 5] = 0.0;
00120 A[2][ 6] = 0.0;
00121 A[2][ 7] = 0.0;
00122 A[2][ 8] = 0.0;
00123 A[2][ 9] = 0.0;
00124 A[2][10] = 0.0;
00125 A[2][11] = 0.0;
00126 A[2][12] = 0.0;
00127
00128 A[3][ 0] = 1.0/32.0;
00129 A[3][ 1] = 0.0;
00130 A[3][ 2] = 3.0/32.0;
00131 A[3][ 3] = 0.0;
00132 A[3][ 4] = 0.0;
00133 A[3][ 5] = 0.0;
00134 A[3][ 6] = 0.0;
00135 A[3][ 7] = 0.0;
00136 A[3][ 8] = 0.0;
00137 A[3][ 9] = 0.0;
00138 A[3][10] = 0.0;
00139 A[3][11] = 0.0;
00140 A[3][12] = 0.0;
00141
00142 A[4][ 0] = 5.0/16.0;
00143 A[4][ 1] = 0.0;
00144 A[4][ 2] = -75.0/64.0;
00145 A[4][ 3] = 75.0/64.0;
00146 A[4][ 4] = 0.0;
00147 A[4][ 5] = 0.0;
00148 A[4][ 6] = 0.0;
00149 A[4][ 7] = 0.0;
00150 A[4][ 8] = 0.0;
00151 A[4][ 9] = 0.0;
00152 A[4][10] = 0.0;
00153 A[4][11] = 0.0;
00154 A[4][12] = 0.0;
00155
00156 A[5][ 0] = 3.0/80.0;
00157 A[5][ 1] = 0.0;
00158 A[5][ 2] = 0.0;
00159 A[5][ 3] = 3.0/16.0;
00160 A[5][ 4] = 3.0/20.0;
00161 A[5][ 5] = 0.0;
00162 A[5][ 6] = 0.0;
00163 A[5][ 7] = 0.0;
00164 A[5][ 8] = 0.0;
00165 A[5][ 9] = 0.0;
00166 A[5][10] = 0.0;
00167 A[5][11] = 0.0;
00168 A[5][12] = 0.0;
00169
00170 A[6][ 0] = 29443841.0/614563906.0;
00171 A[6][ 1] = 0.0;
00172 A[6][ 2] = 0.0;
00173 A[6][ 3] = 77736538.0/692538347.0;
00174 A[6][ 4] = -28693883.0/1125000000.0;
00175 A[6][ 5] = 23124283.0/1800000000.0;
00176 A[6][ 6] = 0.0;
00177 A[6][ 7] = 0.0;
00178 A[6][ 8] = 0.0;
00179 A[6][ 9] = 0.0;
00180 A[6][10] = 0.0;
00181 A[6][11] = 0.0;
00182 A[6][12] = 0.0;
00183
00184 A[7][ 0] = 16016141.0/946692911.0;
00185 A[7][ 1] = 0.0;
00186 A[7][ 2] = 0.0;
00187 A[7][ 3] = 61564180.0/158732637.0;
00188 A[7][ 4] = 22789713.0/633445777.0;
00189 A[7][ 5] = 545815736.0/2771057229.0;
00190 A[7][ 6] = -180193667.0/1043307555.0;
00191 A[7][ 7] = 0.0;
00192 A[7][ 8] = 0.0;
00193 A[7][ 9] = 0.0;
00194 A[7][10] = 0.0;
00195 A[7][11] = 0.0;
00196 A[7][12] = 0.0;
00197
00198 A[8][ 0] = 39632708.0/573591083.0;
00199 A[8][ 1] = 0.0;
00200 A[8][ 2] = 0.0;
00201 A[8][ 3] = -433636366.0/683701615.0;
00202 A[8][ 4] = -421739975.0/2616292301.0;
00203 A[8][ 5] = 100302831.0/723423059.0;
00204 A[8][ 6] = 790204164.0/839813087.0;
00205 A[8][ 7] = 800635310.0/3783071287.0;
00206 A[8][ 8] = 0.0;
00207 A[8][ 9] = 0.0;
00208 A[8][10] = 0.0;
00209 A[8][11] = 0.0;
00210 A[8][12] = 0.0;
00211
00212 A[9][ 0] = 246121993.0/1340847787.0;
00213 A[9][ 1] = 0.0;
00214 A[9][ 2] = 0.0;
00215 A[9][ 3] = -37695042795.0/15268766246.0;
00216 A[9][ 4] = -309121744.0/1061227803.0;
00217 A[9][ 5] = -12992083.0/490766935.0;
00218 A[9][ 6] = 6005943493.0/2108947869.0;
00219 A[9][ 7] = 393006217.0/1396673457.0;
00220 A[9][ 8] = 123872331.0/1001029789.0;
00221 A[9][ 9] = 0.0;
00222 A[9][10] = 0.0;
00223 A[9][11] = 0.0;
00224 A[9][12] = 0.0;
00225
00226 A[10][ 0] = -1028468189.0/846180014.0;
00227 A[10][ 1] = 0.0;
00228 A[10][ 2] = 0.0;
00229 A[10][ 3] = 8478235783.0/508512852.0;
00230 A[10][ 4] = 1311729495.0/1432422823.0;
00231 A[10][ 5] = -10304129995.0/1701304382.0;
00232 A[10][ 6] = -48777925059.0/3047939560.0;
00233 A[10][ 7] = 15336726248.0/1032824649.0;
00234 A[10][ 8] = -45442868181.0/3398467696.0;
00235 A[10][ 9] = 3065993473.0/597172653.0;
00236 A[10][10] = 0.0;
00237 A[10][11] = 0.0;
00238 A[10][11] = 0.0;
00239
00240 A[11][ 0] = 185892177.0/718116043.0;
00241 A[11][ 1] = 0.0;
00242 A[11][ 2] = 0.0;
00243 A[11][ 3] = -3185094517.0/667107341.0;
00244 A[11][ 4] = -477755414.0/1098053517.0;
00245 A[11][ 5] = -703635378.0/230739211.0;
00246 A[11][ 6] = 5731566787.0/1027545527.0;
00247 A[11][ 7] = 5232866602.0/850066563.0;
00248 A[11][ 8] = -4093664535.0/808688257.0;
00249 A[11][ 9] = 3962137247.0/1805957418.0;
00250 A[11][10] = 65686358.0/487910083.0;
00251 A[11][11] = 0.0;
00252 A[11][12] = 0.0;
00253
00254 A[12][ 0] = 403863854.0/491063109.0;
00255 A[12][ 1] = 0.0;
00256 A[12][ 2] = 0.0;
00257 A[12][ 3] = -5068492393.0/434740067.0;
00258 A[12][ 4] = -411421997.0/543043805.0;
00259 A[12][ 5] = 652783627.0/914296604.0;
00260 A[12][ 6] = 11173962825.0/925320556.0;
00261 A[12][ 7] = -13158990841.0/6184727034.0;
00262 A[12][ 8] = 3936647629.0/1978049680.0;
00263 A[12][ 9] = -160528059.0/685178525.0;
00264 A[12][10] = 248638103.0/1413531060.0;
00265 A[12][11] = 0.0;
00266 A[12][12] = 0.0;
00267
00268
00269
00270 b4[ 0] = 14005451.0/335480064.0;
00271 b4[ 1] = 0.0;
00272 b4[ 2] = 0.0;
00273 b4[ 3] = 0.0;
00274 b4[ 4] = 0.0;
00275 b4[ 5] = -59238493.0/1068277825.0;
00276 b4[ 6] = 181606767.0/758867731.0;
00277 b4[ 7] = 561292985.0/797845732.0;
00278 b4[ 8] = -1041891430.0/1371343529.0;
00279 b4[ 9] = 760417239.0/1151165299.0;
00280 b4[10] = 118820643.0/751138087.0;
00281 b4[11] = -528747749.0/2220607170.0;
00282 b4[12] = 1.0/4.0;
00283
00284 b5[ 0] = 13451932.0/455176623.0;
00285 b5[ 1] = 0.0;
00286 b5[ 2] = 0.0;
00287 b5[ 3] = 0.0;
00288 b5[ 4] = 0.0;
00289 b5[ 5] = -808719846.0/976000145.0;
00290 b5[ 6] = 1757004468.0/5645159321.0;
00291 b5[ 7] = 656045339.0/265891186.0;
00292 b5[ 8] = -3867574721.0/1518517206.0;
00293 b5[ 9] = 465885868.0/322736535.0;
00294 b5[10] = 53011238.0/667516719.0;
00295 b5[11] = 2.0/45.0;
00296 b5[12] = 0.0;
00297
00298 c[ 0] = 0.0;
00299 c[ 1] = 1.0/18.0;
00300 c[ 2] = 1.0/12.0;
00301 c[ 3] = 1.0/8.0;
00302 c[ 4] = 5.0/16.0;
00303 c[ 5] = 3.0/8.0;
00304 c[ 6] = 59.0/400.0;
00305 c[ 7] = 93.0/200.0;
00306 c[ 8] = 5490023248.0/9719169821.0;
00307 c[ 9] = 13.0/20.0;
00308 c[10] = 1201146811.0/1299019798.0;
00309 c[11] = 1.0;
00310 c[12] = 1.0;
00311 }
00312
00313 CLOSE_NAMESPACE_ACADO
00314
00315