2015-12-06 07:18:05 -04:00
/****************************************************************************
*
* Copyright ( c ) 2015 Estimation and Control Library ( ECL ) . All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
*
* 1. Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* 2. Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in
* the documentation and / or other materials provided with the
* distribution .
* 3. Neither the name ECL nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT ,
* INCIDENTAL , SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING ,
* BUT NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS
* OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT
* LIABILITY , OR TORT ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE , EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**
* @ file covariance . cpp
* Contains functions for initialising , predicting and updating the state
* covariance matrix
*
* @ author Roman Bast < bastroman @ gmail . com >
*
*/
# include "ekf.h"
# include <math.h>
2016-02-17 21:33:18 -04:00
# include "mathlib.h"
2015-12-06 07:18:05 -04:00
void Ekf : : initialiseCovariance ( )
{
2015-12-07 04:26:30 -04:00
for ( unsigned i = 0 ; i < _k_num_states ; i + + ) {
for ( unsigned j = 0 ; j < _k_num_states ; j + + ) {
2015-12-06 07:18:05 -04:00
P [ i ] [ j ] = 0.0f ;
}
}
2016-02-22 07:12:47 -04:00
// calculate average prediction time step in sec
2016-05-22 12:40:43 -03:00
float dt = 0.001f * ( float ) FILTER_UPDATE_PERIOD_MS ;
2016-02-22 07:12:47 -04:00
2016-05-16 23:39:11 -03:00
// define the initial angle uncertainty as variances for a rotation vector
Vector3f rot_vec_var ;
rot_vec_var ( 2 ) = rot_vec_var ( 1 ) = rot_vec_var ( 0 ) = sq ( _params . initial_tilt_err ) ;
// update the quaternion state covariances
initialiseQuatCovariances ( rot_vec_var ) ;
2015-12-06 07:18:05 -04:00
// velocity
2016-04-27 23:05:54 -03:00
P [ 4 ] [ 4 ] = sq ( fmaxf ( _params . gps_vel_noise , 0.01f ) ) ;
P [ 5 ] [ 5 ] = P [ 4 ] [ 4 ] ;
P [ 6 ] [ 6 ] = sq ( 1.5f ) * P [ 4 ] [ 4 ] ;
2015-12-06 07:18:05 -04:00
// position
2016-04-27 23:05:54 -03:00
P [ 7 ] [ 7 ] = sq ( fmaxf ( _params . gps_pos_noise , 0.01f ) ) ;
P [ 8 ] [ 8 ] = P [ 7 ] [ 7 ] ;
2016-05-03 05:47:29 -03:00
if ( _control_status . flags . rng_hgt ) {
P [ 9 ] [ 9 ] = sq ( fmaxf ( _params . range_noise , 0.01f ) ) ;
} else if ( _control_status . flags . gps_hgt ) {
float lower_limit = fmaxf ( _params . gps_pos_noise , 0.01f ) ;
float upper_limit = fmaxf ( _params . pos_noaid_noise , lower_limit ) ;
P [ 9 ] [ 9 ] = sq ( 1.5f * math : : constrain ( _gps_sample_delayed . vacc , lower_limit , upper_limit ) ) ;
} else {
P [ 9 ] [ 9 ] = sq ( fmaxf ( _params . baro_noise , 0.01f ) ) ;
}
2015-12-06 07:18:05 -04:00
// gyro bias
2016-05-16 22:02:56 -03:00
P [ 10 ] [ 10 ] = sq ( _params . switch_on_gyro_bias * dt ) ;
2016-04-27 23:05:54 -03:00
P [ 11 ] [ 11 ] = P [ 10 ] [ 10 ] ;
P [ 12 ] [ 12 ] = P [ 10 ] [ 10 ] ;
2015-12-06 07:18:05 -04:00
2016-04-27 23:05:54 -03:00
// accel bias
2016-05-16 22:02:56 -03:00
P [ 13 ] [ 13 ] = sq ( _params . switch_on_accel_bias * dt ) ;
2016-04-27 23:05:54 -03:00
P [ 14 ] [ 14 ] = P [ 13 ] [ 13 ] ;
P [ 15 ] [ 15 ] = P [ 13 ] [ 13 ] ;
2015-12-06 07:18:05 -04:00
2016-02-15 19:42:18 -04:00
// variances for optional states
// these state variances are set to zero until the states are required, then they must be initialised
2015-12-06 07:18:05 -04:00
// earth magnetic field
2016-02-15 19:42:18 -04:00
P [ 16 ] [ 16 ] = 0.0f ;
P [ 17 ] [ 17 ] = 0.0f ;
P [ 18 ] [ 18 ] = 0.0f ;
2015-12-06 07:18:05 -04:00
// body magnetic field
2016-02-15 19:42:18 -04:00
P [ 19 ] [ 19 ] = 0.0f ;
P [ 20 ] [ 20 ] = 0.0f ;
P [ 21 ] [ 21 ] = 0.0f ;
2015-12-06 07:18:05 -04:00
// wind
2016-02-15 19:42:18 -04:00
P [ 22 ] [ 22 ] = 0.0f ;
P [ 23 ] [ 23 ] = 0.0f ;
2015-12-06 07:18:05 -04:00
}
2016-03-07 05:22:06 -04:00
void Ekf : : get_pos_var ( Vector3f & pos_var )
{
2016-04-27 23:05:54 -03:00
pos_var ( 0 ) = P [ 7 ] [ 7 ] ;
pos_var ( 1 ) = P [ 8 ] [ 8 ] ;
pos_var ( 2 ) = P [ 9 ] [ 9 ] ;
2016-03-07 05:22:06 -04:00
}
void Ekf : : get_vel_var ( Vector3f & vel_var )
{
2016-04-27 23:05:54 -03:00
vel_var ( 0 ) = P [ 4 ] [ 4 ] ;
vel_var ( 1 ) = P [ 5 ] [ 5 ] ;
vel_var ( 2 ) = P [ 6 ] [ 6 ] ;
2016-03-07 05:22:06 -04:00
}
2015-12-06 07:18:05 -04:00
void Ekf : : predictCovariance ( )
{
// assign intermediate state variables
float q0 = _state . quat_nominal ( 0 ) ;
float q1 = _state . quat_nominal ( 1 ) ;
float q2 = _state . quat_nominal ( 2 ) ;
float q3 = _state . quat_nominal ( 3 ) ;
float dax = _imu_sample_delayed . delta_ang ( 0 ) ;
float day = _imu_sample_delayed . delta_ang ( 1 ) ;
float daz = _imu_sample_delayed . delta_ang ( 2 ) ;
float dvx = _imu_sample_delayed . delta_vel ( 0 ) ;
float dvy = _imu_sample_delayed . delta_vel ( 1 ) ;
float dvz = _imu_sample_delayed . delta_vel ( 2 ) ;
float dax_b = _state . gyro_bias ( 0 ) ;
float day_b = _state . gyro_bias ( 1 ) ;
float daz_b = _state . gyro_bias ( 2 ) ;
2016-04-27 23:05:54 -03:00
float dvx_b = _state . accel_bias ( 0 ) ;
float dvy_b = _state . accel_bias ( 1 ) ;
float dvz_b = _state . accel_bias ( 2 ) ;
2015-12-06 07:18:05 -04:00
2016-04-27 23:05:54 -03:00
float dt = _imu_sample_delayed . delta_ang_dt ;
2015-12-07 04:26:30 -04:00
2016-05-02 05:04:42 -03:00
// compute noise variance for stationary processes
2015-12-07 04:26:30 -04:00
float process_noise [ _k_num_states ] = { } ;
2016-05-02 23:34:13 -03:00
// convert rate of change of rate gyro bias (rad/s**2) as specified by the parameter to an expected change in delta angle (rad) since the last update
float d_ang_bias_sig = dt * dt * math : : constrain ( _params . gyro_bias_p_noise , 0.0f , 1.0f ) ;
// convert rate of change of acceerometer bias (m/s**3) as specified by the parameter to an expected change in delta velocity (m/s) since the last update
float d_vel_bias_sig = dt * dt * math : : constrain ( _params . accel_bias_p_noise , 0.0f , 1.0f ) ;
2016-02-15 20:05:46 -04:00
2016-04-03 19:24:24 -03:00
// Don't continue to grow the earth field variances if they are becoming too large or we are not doing 3-axis fusion as this can make the covariance matrix badly conditioned
2016-05-02 23:34:13 -03:00
float mag_I_sig ;
2016-05-22 12:39:25 -03:00
if ( _control_status . flags . mag_3D & & ( P [ 16 ] [ 16 ] + P [ 17 ] [ 17 ] + P [ 18 ] [ 18 ] ) < 0.1f ) {
2016-04-27 23:05:54 -03:00
mag_I_sig = dt * math : : constrain ( _params . mage_p_noise , 0.0f , 1.0f ) ;
2016-02-15 20:05:46 -04:00
} else {
mag_I_sig = 0.0f ;
}
2016-04-03 19:24:24 -03:00
// Don't continue to grow the body field variances if they is becoming too large or we are not doing 3-axis fusion as this can make the covariance matrix badly conditioned
2016-05-02 23:34:13 -03:00
float mag_B_sig ;
2016-02-15 20:05:46 -04:00
if ( _control_status . flags . mag_3D & & ( P [ 19 ] [ 19 ] + P [ 20 ] [ 20 ] + P [ 21 ] [ 21 ] ) < 0.1f ) {
2016-04-27 23:05:54 -03:00
mag_B_sig = dt * math : : constrain ( _params . magb_p_noise , 0.0f , 1.0f ) ;
2016-02-15 20:05:46 -04:00
} else {
mag_B_sig = 0.0f ;
}
float wind_vel_sig ;
// Don't continue to grow wind velocity state variances if they are becoming too large or we are not using wind velocity states as this can make the covariance matrix badly conditioned
2016-04-05 10:14:04 -03:00
if ( _control_status . flags . wind & & ( P [ 22 ] [ 22 ] + P [ 23 ] [ 23 ] ) < 1000.0f ) {
2016-02-15 20:05:46 -04:00
wind_vel_sig = dt * math : : constrain ( _params . wind_vel_p_noise , 0.0f , 1.0f ) ;
} else {
wind_vel_sig = 0.0f ;
}
2015-12-07 04:26:30 -04:00
2016-04-30 19:11:15 -03:00
// Construct the process noise variance diagonal for those states with a stationary process model
// These are kinematic states and their error growth is controlled separately by the IMU noise variances
2016-04-27 23:05:54 -03:00
for ( unsigned i = 0 ; i < = 9 ; i + + ) {
2015-12-07 04:26:30 -04:00
process_noise [ i ] = 0.0f ;
}
2016-04-30 19:11:15 -03:00
// delta angle bias states
process_noise [ 12 ] = process_noise [ 11 ] = process_noise [ 10 ] = sq ( d_ang_bias_sig ) ;
// delta_velocity bias states
process_noise [ 15 ] = process_noise [ 14 ] = process_noise [ 13 ] = sq ( d_vel_bias_sig ) ;
// earth frame magnetic field states
process_noise [ 18 ] = process_noise [ 17 ] = process_noise [ 16 ] = sq ( mag_I_sig ) ;
// body frame magnetic field states
process_noise [ 21 ] = process_noise [ 20 ] = process_noise [ 19 ] = sq ( mag_B_sig ) ;
// wind velocity states
process_noise [ 23 ] = process_noise [ 22 ] = sq ( wind_vel_sig ) ;
2015-12-06 07:18:05 -04:00
2016-04-27 23:05:54 -03:00
// assign IMU noise variances
2015-12-06 07:18:05 -04:00
// inputs to the system are 3 delta angles and 3 delta velocities
2016-04-27 23:05:54 -03:00
float daxVar , dayVar , dazVar ;
float dvxVar , dvyVar , dvzVar ;
float gyro_noise = math : : constrain ( _params . gyro_noise , 0.0f , 1.0f ) ;
daxVar = dayVar = dazVar = sq ( dt * gyro_noise ) ;
float accel_noise = math : : constrain ( _params . accel_noise , 0.0f , 1.0f ) ;
dvxVar = dvyVar = dvzVar = sq ( dt * accel_noise ) ;
2015-12-07 04:26:30 -04:00
2016-04-30 19:12:14 -03:00
// predict the covariance
2015-12-06 07:18:05 -04:00
// intermediate calculations
2016-05-04 20:11:27 -03:00
float SF [ 21 ] ;
2016-04-27 23:05:54 -03:00
SF [ 0 ] = dvz - dvz_b ;
SF [ 1 ] = dvy - dvy_b ;
SF [ 2 ] = dvx - dvx_b ;
2016-05-04 20:11:27 -03:00
SF [ 3 ] = 2 * q1 * SF [ 2 ] + 2 * q2 * SF [ 1 ] + 2 * q3 * SF [ 0 ] ;
SF [ 4 ] = 2 * q0 * SF [ 1 ] - 2 * q1 * SF [ 0 ] + 2 * q3 * SF [ 2 ] ;
SF [ 5 ] = 2 * q0 * SF [ 2 ] + 2 * q2 * SF [ 0 ] - 2 * q3 * SF [ 1 ] ;
SF [ 6 ] = day / 2 - day_b / 2 ;
SF [ 7 ] = daz / 2 - daz_b / 2 ;
SF [ 8 ] = dax / 2 - dax_b / 2 ;
SF [ 9 ] = dax_b / 2 - dax / 2 ;
SF [ 10 ] = daz_b / 2 - daz / 2 ;
SF [ 11 ] = day_b / 2 - day / 2 ;
SF [ 12 ] = 2 * q1 * SF [ 1 ] ;
SF [ 13 ] = 2 * q0 * SF [ 0 ] ;
SF [ 14 ] = q1 / 2 ;
SF [ 15 ] = q2 / 2 ;
SF [ 16 ] = q3 / 2 ;
2016-04-27 23:05:54 -03:00
SF [ 17 ] = sq ( q3 ) ;
SF [ 18 ] = sq ( q2 ) ;
SF [ 19 ] = sq ( q1 ) ;
SF [ 20 ] = sq ( q0 ) ;
2016-05-04 20:11:27 -03:00
float SG [ 8 ] ;
SG [ 0 ] = q0 / 2 ;
2015-12-06 07:18:05 -04:00
SG [ 1 ] = sq ( q3 ) ;
SG [ 2 ] = sq ( q2 ) ;
SG [ 3 ] = sq ( q1 ) ;
SG [ 4 ] = sq ( q0 ) ;
2016-05-04 20:11:27 -03:00
SG [ 5 ] = 2 * q2 * q3 ;
SG [ 6 ] = 2 * q1 * q3 ;
SG [ 7 ] = 2 * q1 * q2 ;
float SQ [ 11 ] ;
SQ [ 0 ] = dvzVar * ( SG [ 5 ] - 2 * q0 * q1 ) * ( SG [ 1 ] - SG [ 2 ] - SG [ 3 ] + SG [ 4 ] ) - dvyVar * ( SG [ 5 ] + 2 * q0 * q1 ) * ( SG [ 1 ] - SG [ 2 ] + SG [ 3 ] - SG [ 4 ] ) + dvxVar * ( SG [ 6 ] - 2 * q0 * q2 ) * ( SG [ 7 ] + 2 * q0 * q3 ) ;
SQ [ 1 ] = dvzVar * ( SG [ 6 ] + 2 * q0 * q2 ) * ( SG [ 1 ] - SG [ 2 ] - SG [ 3 ] + SG [ 4 ] ) - dvxVar * ( SG [ 6 ] - 2 * q0 * q2 ) * ( SG [ 1 ] + SG [ 2 ] - SG [ 3 ] - SG [ 4 ] ) + dvyVar * ( SG [ 5 ] + 2 * q0 * q1 ) * ( SG [ 7 ] - 2 * q0 * q3 ) ;
SQ [ 2 ] = dvzVar * ( SG [ 5 ] - 2 * q0 * q1 ) * ( SG [ 6 ] + 2 * q0 * q2 ) - dvyVar * ( SG [ 7 ] - 2 * q0 * q3 ) * ( SG [ 1 ] - SG [ 2 ] + SG [ 3 ] - SG [ 4 ] ) - dvxVar * ( SG [ 7 ] + 2 * q0 * q3 ) * ( SG [ 1 ] + SG [ 2 ] - SG [ 3 ] - SG [ 4 ] ) ;
SQ [ 3 ] = ( dayVar * q1 * SG [ 0 ] ) / 2 - ( dazVar * q1 * SG [ 0 ] ) / 2 - ( daxVar * q2 * q3 ) / 4 ;
SQ [ 4 ] = ( dazVar * q2 * SG [ 0 ] ) / 2 - ( daxVar * q2 * SG [ 0 ] ) / 2 - ( dayVar * q1 * q3 ) / 4 ;
SQ [ 5 ] = ( daxVar * q3 * SG [ 0 ] ) / 2 - ( dayVar * q3 * SG [ 0 ] ) / 2 - ( dazVar * q1 * q2 ) / 4 ;
SQ [ 6 ] = ( daxVar * q1 * q2 ) / 4 - ( dazVar * q3 * SG [ 0 ] ) / 2 - ( dayVar * q1 * q2 ) / 4 ;
SQ [ 7 ] = ( dazVar * q1 * q3 ) / 4 - ( daxVar * q1 * q3 ) / 4 - ( dayVar * q2 * SG [ 0 ] ) / 2 ;
SQ [ 8 ] = ( dayVar * q2 * q3 ) / 4 - ( daxVar * q1 * SG [ 0 ] ) / 2 - ( dazVar * q2 * q3 ) / 4 ;
2016-04-27 23:05:54 -03:00
SQ [ 9 ] = sq ( SG [ 0 ] ) ;
SQ [ 10 ] = sq ( q1 ) ;
float SPP [ 11 ] = { } ;
2016-05-04 20:11:27 -03:00
SPP [ 0 ] = SF [ 12 ] + SF [ 13 ] - 2 * q2 * SF [ 2 ] ;
2016-04-27 23:05:54 -03:00
SPP [ 1 ] = SF [ 17 ] - SF [ 18 ] - SF [ 19 ] + SF [ 20 ] ;
SPP [ 2 ] = SF [ 17 ] - SF [ 18 ] + SF [ 19 ] - SF [ 20 ] ;
SPP [ 3 ] = SF [ 17 ] + SF [ 18 ] - SF [ 19 ] - SF [ 20 ] ;
2016-05-04 20:11:27 -03:00
SPP [ 4 ] = 2 * q0 * q2 - 2 * q1 * q3 ;
SPP [ 5 ] = 2 * q0 * q1 - 2 * q2 * q3 ;
SPP [ 6 ] = 2 * q0 * q3 - 2 * q1 * q2 ;
SPP [ 7 ] = 2 * q0 * q1 + 2 * q2 * q3 ;
SPP [ 8 ] = 2 * q0 * q3 + 2 * q1 * q2 ;
SPP [ 9 ] = 2 * q0 * q2 + 2 * q1 * q3 ;
2016-04-27 23:05:54 -03:00
SPP [ 10 ] = SF [ 16 ] ;
2015-12-06 07:18:05 -04:00
// covariance update
2016-04-30 19:12:14 -03:00
float nextP [ 24 ] [ 24 ] ;
2016-05-04 20:11:27 -03:00
// calculate variances and upper diagonal covariances for quaternion, velocity, position and gyro bias states
nextP [ 0 ] [ 0 ] = P [ 0 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 9 ] + P [ 2 ] [ 0 ] * SF [ 11 ] + P [ 3 ] [ 0 ] * SF [ 10 ] + P [ 10 ] [ 0 ] * SF [ 14 ] + P [ 11 ] [ 0 ] * SF [ 15 ] + P [ 12 ] [ 0 ] * SPP [ 10 ] + ( daxVar * SQ [ 10 ] ) / 4 + SF [ 9 ] * ( P [ 0 ] [ 1 ] + P [ 1 ] [ 1 ] * SF [ 9 ] + P [ 2 ] [ 1 ] * SF [ 11 ] + P [ 3 ] [ 1 ] * SF [ 10 ] + P [ 10 ] [ 1 ] * SF [ 14 ] + P [ 11 ] [ 1 ] * SF [ 15 ] + P [ 12 ] [ 1 ] * SPP [ 10 ] ) + SF [ 11 ] * ( P [ 0 ] [ 2 ] + P [ 1 ] [ 2 ] * SF [ 9 ] + P [ 2 ] [ 2 ] * SF [ 11 ] + P [ 3 ] [ 2 ] * SF [ 10 ] + P [ 10 ] [ 2 ] * SF [ 14 ] + P [ 11 ] [ 2 ] * SF [ 15 ] + P [ 12 ] [ 2 ] * SPP [ 10 ] ) + SF [ 10 ] * ( P [ 0 ] [ 3 ] + P [ 1 ] [ 3 ] * SF [ 9 ] + P [ 2 ] [ 3 ] * SF [ 11 ] + P [ 3 ] [ 3 ] * SF [ 10 ] + P [ 10 ] [ 3 ] * SF [ 14 ] + P [ 11 ] [ 3 ] * SF [ 15 ] + P [ 12 ] [ 3 ] * SPP [ 10 ] ) + SF [ 14 ] * ( P [ 0 ] [ 10 ] + P [ 1 ] [ 10 ] * SF [ 9 ] + P [ 2 ] [ 10 ] * SF [ 11 ] + P [ 3 ] [ 10 ] * SF [ 10 ] + P [ 10 ] [ 10 ] * SF [ 14 ] + P [ 11 ] [ 10 ] * SF [ 15 ] + P [ 12 ] [ 10 ] * SPP [ 10 ] ) + SF [ 15 ] * ( P [ 0 ] [ 11 ] + P [ 1 ] [ 11 ] * SF [ 9 ] + P [ 2 ] [ 11 ] * SF [ 11 ] + P [ 3 ] [ 11 ] * SF [ 10 ] + P [ 10 ] [ 11 ] * SF [ 14 ] + P [ 11 ] [ 11 ] * SF [ 15 ] + P [ 12 ] [ 11 ] * SPP [ 10 ] ) + SPP [ 10 ] * ( P [ 0 ] [ 12 ] + P [ 1 ] [ 12 ] * SF [ 9 ] + P [ 2 ] [ 12 ] * SF [ 11 ] + P [ 3 ] [ 12 ] * SF [ 10 ] + P [ 10 ] [ 12 ] * SF [ 14 ] + P [ 11 ] [ 12 ] * SF [ 15 ] + P [ 12 ] [ 12 ] * SPP [ 10 ] ) + ( dayVar * sq ( q2 ) ) / 4 + ( dazVar * sq ( q3 ) ) / 4 ;
nextP [ 0 ] [ 1 ] = P [ 0 ] [ 1 ] + SQ [ 8 ] + P [ 1 ] [ 1 ] * SF [ 9 ] + P [ 2 ] [ 1 ] * SF [ 11 ] + P [ 3 ] [ 1 ] * SF [ 10 ] + P [ 10 ] [ 1 ] * SF [ 14 ] + P [ 11 ] [ 1 ] * SF [ 15 ] + P [ 12 ] [ 1 ] * SPP [ 10 ] + SF [ 8 ] * ( P [ 0 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 9 ] + P [ 2 ] [ 0 ] * SF [ 11 ] + P [ 3 ] [ 0 ] * SF [ 10 ] + P [ 10 ] [ 0 ] * SF [ 14 ] + P [ 11 ] [ 0 ] * SF [ 15 ] + P [ 12 ] [ 0 ] * SPP [ 10 ] ) + SF [ 7 ] * ( P [ 0 ] [ 2 ] + P [ 1 ] [ 2 ] * SF [ 9 ] + P [ 2 ] [ 2 ] * SF [ 11 ] + P [ 3 ] [ 2 ] * SF [ 10 ] + P [ 10 ] [ 2 ] * SF [ 14 ] + P [ 11 ] [ 2 ] * SF [ 15 ] + P [ 12 ] [ 2 ] * SPP [ 10 ] ) + SF [ 11 ] * ( P [ 0 ] [ 3 ] + P [ 1 ] [ 3 ] * SF [ 9 ] + P [ 2 ] [ 3 ] * SF [ 11 ] + P [ 3 ] [ 3 ] * SF [ 10 ] + P [ 10 ] [ 3 ] * SF [ 14 ] + P [ 11 ] [ 3 ] * SF [ 15 ] + P [ 12 ] [ 3 ] * SPP [ 10 ] ) - SF [ 15 ] * ( P [ 0 ] [ 12 ] + P [ 1 ] [ 12 ] * SF [ 9 ] + P [ 2 ] [ 12 ] * SF [ 11 ] + P [ 3 ] [ 12 ] * SF [ 10 ] + P [ 10 ] [ 12 ] * SF [ 14 ] + P [ 11 ] [ 12 ] * SF [ 15 ] + P [ 12 ] [ 12 ] * SPP [ 10 ] ) + SPP [ 10 ] * ( P [ 0 ] [ 11 ] + P [ 1 ] [ 11 ] * SF [ 9 ] + P [ 2 ] [ 11 ] * SF [ 11 ] + P [ 3 ] [ 11 ] * SF [ 10 ] + P [ 10 ] [ 11 ] * SF [ 14 ] + P [ 11 ] [ 11 ] * SF [ 15 ] + P [ 12 ] [ 11 ] * SPP [ 10 ] ) - ( q0 * ( P [ 0 ] [ 10 ] + P [ 1 ] [ 10 ] * SF [ 9 ] + P [ 2 ] [ 10 ] * SF [ 11 ] + P [ 3 ] [ 10 ] * SF [ 10 ] + P [ 10 ] [ 10 ] * SF [ 14 ] + P [ 11 ] [ 10 ] * SF [ 15 ] + P [ 12 ] [ 10 ] * SPP [ 10 ] ) ) / 2 ;
nextP [ 1 ] [ 1 ] = P [ 1 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 8 ] + P [ 2 ] [ 1 ] * SF [ 7 ] + P [ 3 ] [ 1 ] * SF [ 11 ] - P [ 12 ] [ 1 ] * SF [ 15 ] + P [ 11 ] [ 1 ] * SPP [ 10 ] + daxVar * SQ [ 9 ] - ( P [ 10 ] [ 1 ] * q0 ) / 2 + SF [ 8 ] * ( P [ 1 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 8 ] + P [ 2 ] [ 0 ] * SF [ 7 ] + P [ 3 ] [ 0 ] * SF [ 11 ] - P [ 12 ] [ 0 ] * SF [ 15 ] + P [ 11 ] [ 0 ] * SPP [ 10 ] - ( P [ 10 ] [ 0 ] * q0 ) / 2 ) + SF [ 7 ] * ( P [ 1 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 8 ] + P [ 2 ] [ 2 ] * SF [ 7 ] + P [ 3 ] [ 2 ] * SF [ 11 ] - P [ 12 ] [ 2 ] * SF [ 15 ] + P [ 11 ] [ 2 ] * SPP [ 10 ] - ( P [ 10 ] [ 2 ] * q0 ) / 2 ) + SF [ 11 ] * ( P [ 1 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 8 ] + P [ 2 ] [ 3 ] * SF [ 7 ] + P [ 3 ] [ 3 ] * SF [ 11 ] - P [ 12 ] [ 3 ] * SF [ 15 ] + P [ 11 ] [ 3 ] * SPP [ 10 ] - ( P [ 10 ] [ 3 ] * q0 ) / 2 ) - SF [ 15 ] * ( P [ 1 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 8 ] + P [ 2 ] [ 12 ] * SF [ 7 ] + P [ 3 ] [ 12 ] * SF [ 11 ] - P [ 12 ] [ 12 ] * SF [ 15 ] + P [ 11 ] [ 12 ] * SPP [ 10 ] - ( P [ 10 ] [ 12 ] * q0 ) / 2 ) + SPP [ 10 ] * ( P [ 1 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 8 ] + P [ 2 ] [ 11 ] * SF [ 7 ] + P [ 3 ] [ 11 ] * SF [ 11 ] - P [ 12 ] [ 11 ] * SF [ 15 ] + P [ 11 ] [ 11 ] * SPP [ 10 ] - ( P [ 10 ] [ 11 ] * q0 ) / 2 ) + ( dayVar * sq ( q3 ) ) / 4 + ( dazVar * sq ( q2 ) ) / 4 - ( q0 * ( P [ 1 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 8 ] + P [ 2 ] [ 10 ] * SF [ 7 ] + P [ 3 ] [ 10 ] * SF [ 11 ] - P [ 12 ] [ 10 ] * SF [ 15 ] + P [ 11 ] [ 10 ] * SPP [ 10 ] - ( P [ 10 ] [ 10 ] * q0 ) / 2 ) ) / 2 ;
nextP [ 0 ] [ 2 ] = P [ 0 ] [ 2 ] + SQ [ 7 ] + P [ 1 ] [ 2 ] * SF [ 9 ] + P [ 2 ] [ 2 ] * SF [ 11 ] + P [ 3 ] [ 2 ] * SF [ 10 ] + P [ 10 ] [ 2 ] * SF [ 14 ] + P [ 11 ] [ 2 ] * SF [ 15 ] + P [ 12 ] [ 2 ] * SPP [ 10 ] + SF [ 6 ] * ( P [ 0 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 9 ] + P [ 2 ] [ 0 ] * SF [ 11 ] + P [ 3 ] [ 0 ] * SF [ 10 ] + P [ 10 ] [ 0 ] * SF [ 14 ] + P [ 11 ] [ 0 ] * SF [ 15 ] + P [ 12 ] [ 0 ] * SPP [ 10 ] ) + SF [ 10 ] * ( P [ 0 ] [ 1 ] + P [ 1 ] [ 1 ] * SF [ 9 ] + P [ 2 ] [ 1 ] * SF [ 11 ] + P [ 3 ] [ 1 ] * SF [ 10 ] + P [ 10 ] [ 1 ] * SF [ 14 ] + P [ 11 ] [ 1 ] * SF [ 15 ] + P [ 12 ] [ 1 ] * SPP [ 10 ] ) + SF [ 8 ] * ( P [ 0 ] [ 3 ] + P [ 1 ] [ 3 ] * SF [ 9 ] + P [ 2 ] [ 3 ] * SF [ 11 ] + P [ 3 ] [ 3 ] * SF [ 10 ] + P [ 10 ] [ 3 ] * SF [ 14 ] + P [ 11 ] [ 3 ] * SF [ 15 ] + P [ 12 ] [ 3 ] * SPP [ 10 ] ) + SF [ 14 ] * ( P [ 0 ] [ 12 ] + P [ 1 ] [ 12 ] * SF [ 9 ] + P [ 2 ] [ 12 ] * SF [ 11 ] + P [ 3 ] [ 12 ] * SF [ 10 ] + P [ 10 ] [ 12 ] * SF [ 14 ] + P [ 11 ] [ 12 ] * SF [ 15 ] + P [ 12 ] [ 12 ] * SPP [ 10 ] ) - SPP [ 10 ] * ( P [ 0 ] [ 10 ] + P [ 1 ] [ 10 ] * SF [ 9 ] + P [ 2 ] [ 10 ] * SF [ 11 ] + P [ 3 ] [ 10 ] * SF [ 10 ] + P [ 10 ] [ 10 ] * SF [ 14 ] + P [ 11 ] [ 10 ] * SF [ 15 ] + P [ 12 ] [ 10 ] * SPP [ 10 ] ) - ( q0 * ( P [ 0 ] [ 11 ] + P [ 1 ] [ 11 ] * SF [ 9 ] + P [ 2 ] [ 11 ] * SF [ 11 ] + P [ 3 ] [ 11 ] * SF [ 10 ] + P [ 10 ] [ 11 ] * SF [ 14 ] + P [ 11 ] [ 11 ] * SF [ 15 ] + P [ 12 ] [ 11 ] * SPP [ 10 ] ) ) / 2 ;
nextP [ 1 ] [ 2 ] = P [ 1 ] [ 2 ] + SQ [ 5 ] + P [ 0 ] [ 2 ] * SF [ 8 ] + P [ 2 ] [ 2 ] * SF [ 7 ] + P [ 3 ] [ 2 ] * SF [ 11 ] - P [ 12 ] [ 2 ] * SF [ 15 ] + P [ 11 ] [ 2 ] * SPP [ 10 ] - ( P [ 10 ] [ 2 ] * q0 ) / 2 + SF [ 6 ] * ( P [ 1 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 8 ] + P [ 2 ] [ 0 ] * SF [ 7 ] + P [ 3 ] [ 0 ] * SF [ 11 ] - P [ 12 ] [ 0 ] * SF [ 15 ] + P [ 11 ] [ 0 ] * SPP [ 10 ] - ( P [ 10 ] [ 0 ] * q0 ) / 2 ) + SF [ 10 ] * ( P [ 1 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 8 ] + P [ 2 ] [ 1 ] * SF [ 7 ] + P [ 3 ] [ 1 ] * SF [ 11 ] - P [ 12 ] [ 1 ] * SF [ 15 ] + P [ 11 ] [ 1 ] * SPP [ 10 ] - ( P [ 10 ] [ 1 ] * q0 ) / 2 ) + SF [ 8 ] * ( P [ 1 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 8 ] + P [ 2 ] [ 3 ] * SF [ 7 ] + P [ 3 ] [ 3 ] * SF [ 11 ] - P [ 12 ] [ 3 ] * SF [ 15 ] + P [ 11 ] [ 3 ] * SPP [ 10 ] - ( P [ 10 ] [ 3 ] * q0 ) / 2 ) + SF [ 14 ] * ( P [ 1 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 8 ] + P [ 2 ] [ 12 ] * SF [ 7 ] + P [ 3 ] [ 12 ] * SF [ 11 ] - P [ 12 ] [ 12 ] * SF [ 15 ] + P [ 11 ] [ 12 ] * SPP [ 10 ] - ( P [ 10 ] [ 12 ] * q0 ) / 2 ) - SPP [ 10 ] * ( P [ 1 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 8 ] + P [ 2 ] [ 10 ] * SF [ 7 ] + P [ 3 ] [ 10 ] * SF [ 11 ] - P [ 12 ] [ 10 ] * SF [ 15 ] + P [ 11 ] [ 10 ] * SPP [ 10 ] - ( P [ 10 ] [ 10 ] * q0 ) / 2 ) - ( q0 * ( P [ 1 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 8 ] + P [ 2 ] [ 11 ] * SF [ 7 ] + P [ 3 ] [ 11 ] * SF [ 11 ] - P [ 12 ] [ 11 ] * SF [ 15 ] + P [ 11 ] [ 11 ] * SPP [ 10 ] - ( P [ 10 ] [ 11 ] * q0 ) / 2 ) ) / 2 ;
nextP [ 2 ] [ 2 ] = P [ 2 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 6 ] + P [ 1 ] [ 2 ] * SF [ 10 ] + P [ 3 ] [ 2 ] * SF [ 8 ] + P [ 12 ] [ 2 ] * SF [ 14 ] - P [ 10 ] [ 2 ] * SPP [ 10 ] + dayVar * SQ [ 9 ] + ( dazVar * SQ [ 10 ] ) / 4 - ( P [ 11 ] [ 2 ] * q0 ) / 2 + SF [ 6 ] * ( P [ 2 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 6 ] + P [ 1 ] [ 0 ] * SF [ 10 ] + P [ 3 ] [ 0 ] * SF [ 8 ] + P [ 12 ] [ 0 ] * SF [ 14 ] - P [ 10 ] [ 0 ] * SPP [ 10 ] - ( P [ 11 ] [ 0 ] * q0 ) / 2 ) + SF [ 10 ] * ( P [ 2 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 6 ] + P [ 1 ] [ 1 ] * SF [ 10 ] + P [ 3 ] [ 1 ] * SF [ 8 ] + P [ 12 ] [ 1 ] * SF [ 14 ] - P [ 10 ] [ 1 ] * SPP [ 10 ] - ( P [ 11 ] [ 1 ] * q0 ) / 2 ) + SF [ 8 ] * ( P [ 2 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 6 ] + P [ 1 ] [ 3 ] * SF [ 10 ] + P [ 3 ] [ 3 ] * SF [ 8 ] + P [ 12 ] [ 3 ] * SF [ 14 ] - P [ 10 ] [ 3 ] * SPP [ 10 ] - ( P [ 11 ] [ 3 ] * q0 ) / 2 ) + SF [ 14 ] * ( P [ 2 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 6 ] + P [ 1 ] [ 12 ] * SF [ 10 ] + P [ 3 ] [ 12 ] * SF [ 8 ] + P [ 12 ] [ 12 ] * SF [ 14 ] - P [ 10 ] [ 12 ] * SPP [ 10 ] - ( P [ 11 ] [ 12 ] * q0 ) / 2 ) - SPP [ 10 ] * ( P [ 2 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 6 ] + P [ 1 ] [ 10 ] * SF [ 10 ] + P [ 3 ] [ 10 ] * SF [ 8 ] + P [ 12 ] [ 10 ] * SF [ 14 ] - P [ 10 ] [ 10 ] * SPP [ 10 ] - ( P [ 11 ] [ 10 ] * q0 ) / 2 ) + ( daxVar * sq ( q3 ) ) / 4 - ( q0 * ( P [ 2 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 6 ] + P [ 1 ] [ 11 ] * SF [ 10 ] + P [ 3 ] [ 11 ] * SF [ 8 ] + P [ 12 ] [ 11 ] * SF [ 14 ] - P [ 10 ] [ 11 ] * SPP [ 10 ] - ( P [ 11 ] [ 11 ] * q0 ) / 2 ) ) / 2 ;
nextP [ 0 ] [ 3 ] = P [ 0 ] [ 3 ] + SQ [ 6 ] + P [ 1 ] [ 3 ] * SF [ 9 ] + P [ 2 ] [ 3 ] * SF [ 11 ] + P [ 3 ] [ 3 ] * SF [ 10 ] + P [ 10 ] [ 3 ] * SF [ 14 ] + P [ 11 ] [ 3 ] * SF [ 15 ] + P [ 12 ] [ 3 ] * SPP [ 10 ] + SF [ 7 ] * ( P [ 0 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 9 ] + P [ 2 ] [ 0 ] * SF [ 11 ] + P [ 3 ] [ 0 ] * SF [ 10 ] + P [ 10 ] [ 0 ] * SF [ 14 ] + P [ 11 ] [ 0 ] * SF [ 15 ] + P [ 12 ] [ 0 ] * SPP [ 10 ] ) + SF [ 6 ] * ( P [ 0 ] [ 1 ] + P [ 1 ] [ 1 ] * SF [ 9 ] + P [ 2 ] [ 1 ] * SF [ 11 ] + P [ 3 ] [ 1 ] * SF [ 10 ] + P [ 10 ] [ 1 ] * SF [ 14 ] + P [ 11 ] [ 1 ] * SF [ 15 ] + P [ 12 ] [ 1 ] * SPP [ 10 ] ) + SF [ 9 ] * ( P [ 0 ] [ 2 ] + P [ 1 ] [ 2 ] * SF [ 9 ] + P [ 2 ] [ 2 ] * SF [ 11 ] + P [ 3 ] [ 2 ] * SF [ 10 ] + P [ 10 ] [ 2 ] * SF [ 14 ] + P [ 11 ] [ 2 ] * SF [ 15 ] + P [ 12 ] [ 2 ] * SPP [ 10 ] ) + SF [ 15 ] * ( P [ 0 ] [ 10 ] + P [ 1 ] [ 10 ] * SF [ 9 ] + P [ 2 ] [ 10 ] * SF [ 11 ] + P [ 3 ] [ 10 ] * SF [ 10 ] + P [ 10 ] [ 10 ] * SF [ 14 ] + P [ 11 ] [ 10 ] * SF [ 15 ] + P [ 12 ] [ 10 ] * SPP [ 10 ] ) - SF [ 14 ] * ( P [ 0 ] [ 11 ] + P [ 1 ] [ 11 ] * SF [ 9 ] + P [ 2 ] [ 11 ] * SF [ 11 ] + P [ 3 ] [ 11 ] * SF [ 10 ] + P [ 10 ] [ 11 ] * SF [ 14 ] + P [ 11 ] [ 11 ] * SF [ 15 ] + P [ 12 ] [ 11 ] * SPP [ 10 ] ) - ( q0 * ( P [ 0 ] [ 12 ] + P [ 1 ] [ 12 ] * SF [ 9 ] + P [ 2 ] [ 12 ] * SF [ 11 ] + P [ 3 ] [ 12 ] * SF [ 10 ] + P [ 10 ] [ 12 ] * SF [ 14 ] + P [ 11 ] [ 12 ] * SF [ 15 ] + P [ 12 ] [ 12 ] * SPP [ 10 ] ) ) / 2 ;
nextP [ 1 ] [ 3 ] = P [ 1 ] [ 3 ] + SQ [ 4 ] + P [ 0 ] [ 3 ] * SF [ 8 ] + P [ 2 ] [ 3 ] * SF [ 7 ] + P [ 3 ] [ 3 ] * SF [ 11 ] - P [ 12 ] [ 3 ] * SF [ 15 ] + P [ 11 ] [ 3 ] * SPP [ 10 ] - ( P [ 10 ] [ 3 ] * q0 ) / 2 + SF [ 7 ] * ( P [ 1 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 8 ] + P [ 2 ] [ 0 ] * SF [ 7 ] + P [ 3 ] [ 0 ] * SF [ 11 ] - P [ 12 ] [ 0 ] * SF [ 15 ] + P [ 11 ] [ 0 ] * SPP [ 10 ] - ( P [ 10 ] [ 0 ] * q0 ) / 2 ) + SF [ 6 ] * ( P [ 1 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 8 ] + P [ 2 ] [ 1 ] * SF [ 7 ] + P [ 3 ] [ 1 ] * SF [ 11 ] - P [ 12 ] [ 1 ] * SF [ 15 ] + P [ 11 ] [ 1 ] * SPP [ 10 ] - ( P [ 10 ] [ 1 ] * q0 ) / 2 ) + SF [ 9 ] * ( P [ 1 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 8 ] + P [ 2 ] [ 2 ] * SF [ 7 ] + P [ 3 ] [ 2 ] * SF [ 11 ] - P [ 12 ] [ 2 ] * SF [ 15 ] + P [ 11 ] [ 2 ] * SPP [ 10 ] - ( P [ 10 ] [ 2 ] * q0 ) / 2 ) + SF [ 15 ] * ( P [ 1 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 8 ] + P [ 2 ] [ 10 ] * SF [ 7 ] + P [ 3 ] [ 10 ] * SF [ 11 ] - P [ 12 ] [ 10 ] * SF [ 15 ] + P [ 11 ] [ 10 ] * SPP [ 10 ] - ( P [ 10 ] [ 10 ] * q0 ) / 2 ) - SF [ 14 ] * ( P [ 1 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 8 ] + P [ 2 ] [ 11 ] * SF [ 7 ] + P [ 3 ] [ 11 ] * SF [ 11 ] - P [ 12 ] [ 11 ] * SF [ 15 ] + P [ 11 ] [ 11 ] * SPP [ 10 ] - ( P [ 10 ] [ 11 ] * q0 ) / 2 ) - ( q0 * ( P [ 1 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 8 ] + P [ 2 ] [ 12 ] * SF [ 7 ] + P [ 3 ] [ 12 ] * SF [ 11 ] - P [ 12 ] [ 12 ] * SF [ 15 ] + P [ 11 ] [ 12 ] * SPP [ 10 ] - ( P [ 10 ] [ 12 ] * q0 ) / 2 ) ) / 2 ;
nextP [ 2 ] [ 3 ] = P [ 2 ] [ 3 ] + SQ [ 3 ] + P [ 0 ] [ 3 ] * SF [ 6 ] + P [ 1 ] [ 3 ] * SF [ 10 ] + P [ 3 ] [ 3 ] * SF [ 8 ] + P [ 12 ] [ 3 ] * SF [ 14 ] - P [ 10 ] [ 3 ] * SPP [ 10 ] - ( P [ 11 ] [ 3 ] * q0 ) / 2 + SF [ 7 ] * ( P [ 2 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 6 ] + P [ 1 ] [ 0 ] * SF [ 10 ] + P [ 3 ] [ 0 ] * SF [ 8 ] + P [ 12 ] [ 0 ] * SF [ 14 ] - P [ 10 ] [ 0 ] * SPP [ 10 ] - ( P [ 11 ] [ 0 ] * q0 ) / 2 ) + SF [ 6 ] * ( P [ 2 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 6 ] + P [ 1 ] [ 1 ] * SF [ 10 ] + P [ 3 ] [ 1 ] * SF [ 8 ] + P [ 12 ] [ 1 ] * SF [ 14 ] - P [ 10 ] [ 1 ] * SPP [ 10 ] - ( P [ 11 ] [ 1 ] * q0 ) / 2 ) + SF [ 9 ] * ( P [ 2 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 6 ] + P [ 1 ] [ 2 ] * SF [ 10 ] + P [ 3 ] [ 2 ] * SF [ 8 ] + P [ 12 ] [ 2 ] * SF [ 14 ] - P [ 10 ] [ 2 ] * SPP [ 10 ] - ( P [ 11 ] [ 2 ] * q0 ) / 2 ) + SF [ 15 ] * ( P [ 2 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 6 ] + P [ 1 ] [ 10 ] * SF [ 10 ] + P [ 3 ] [ 10 ] * SF [ 8 ] + P [ 12 ] [ 10 ] * SF [ 14 ] - P [ 10 ] [ 10 ] * SPP [ 10 ] - ( P [ 11 ] [ 10 ] * q0 ) / 2 ) - SF [ 14 ] * ( P [ 2 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 6 ] + P [ 1 ] [ 11 ] * SF [ 10 ] + P [ 3 ] [ 11 ] * SF [ 8 ] + P [ 12 ] [ 11 ] * SF [ 14 ] - P [ 10 ] [ 11 ] * SPP [ 10 ] - ( P [ 11 ] [ 11 ] * q0 ) / 2 ) - ( q0 * ( P [ 2 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 6 ] + P [ 1 ] [ 12 ] * SF [ 10 ] + P [ 3 ] [ 12 ] * SF [ 8 ] + P [ 12 ] [ 12 ] * SF [ 14 ] - P [ 10 ] [ 12 ] * SPP [ 10 ] - ( P [ 11 ] [ 12 ] * q0 ) / 2 ) ) / 2 ;
nextP [ 3 ] [ 3 ] = P [ 3 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 7 ] + P [ 1 ] [ 3 ] * SF [ 6 ] + P [ 2 ] [ 3 ] * SF [ 9 ] + P [ 10 ] [ 3 ] * SF [ 15 ] - P [ 11 ] [ 3 ] * SF [ 14 ] + ( dayVar * SQ [ 10 ] ) / 4 + dazVar * SQ [ 9 ] - ( P [ 12 ] [ 3 ] * q0 ) / 2 + SF [ 7 ] * ( P [ 3 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 7 ] + P [ 1 ] [ 0 ] * SF [ 6 ] + P [ 2 ] [ 0 ] * SF [ 9 ] + P [ 10 ] [ 0 ] * SF [ 15 ] - P [ 11 ] [ 0 ] * SF [ 14 ] - ( P [ 12 ] [ 0 ] * q0 ) / 2 ) + SF [ 6 ] * ( P [ 3 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 7 ] + P [ 1 ] [ 1 ] * SF [ 6 ] + P [ 2 ] [ 1 ] * SF [ 9 ] + P [ 10 ] [ 1 ] * SF [ 15 ] - P [ 11 ] [ 1 ] * SF [ 14 ] - ( P [ 12 ] [ 1 ] * q0 ) / 2 ) + SF [ 9 ] * ( P [ 3 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 7 ] + P [ 1 ] [ 2 ] * SF [ 6 ] + P [ 2 ] [ 2 ] * SF [ 9 ] + P [ 10 ] [ 2 ] * SF [ 15 ] - P [ 11 ] [ 2 ] * SF [ 14 ] - ( P [ 12 ] [ 2 ] * q0 ) / 2 ) + SF [ 15 ] * ( P [ 3 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 7 ] + P [ 1 ] [ 10 ] * SF [ 6 ] + P [ 2 ] [ 10 ] * SF [ 9 ] + P [ 10 ] [ 10 ] * SF [ 15 ] - P [ 11 ] [ 10 ] * SF [ 14 ] - ( P [ 12 ] [ 10 ] * q0 ) / 2 ) - SF [ 14 ] * ( P [ 3 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 7 ] + P [ 1 ] [ 11 ] * SF [ 6 ] + P [ 2 ] [ 11 ] * SF [ 9 ] + P [ 10 ] [ 11 ] * SF [ 15 ] - P [ 11 ] [ 11 ] * SF [ 14 ] - ( P [ 12 ] [ 11 ] * q0 ) / 2 ) + ( daxVar * sq ( q2 ) ) / 4 - ( q0 * ( P [ 3 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 7 ] + P [ 1 ] [ 12 ] * SF [ 6 ] + P [ 2 ] [ 12 ] * SF [ 9 ] + P [ 10 ] [ 12 ] * SF [ 15 ] - P [ 11 ] [ 12 ] * SF [ 14 ] - ( P [ 12 ] [ 12 ] * q0 ) / 2 ) ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 4 ] = P [ 0 ] [ 4 ] + P [ 1 ] [ 4 ] * SF [ 9 ] + P [ 2 ] [ 4 ] * SF [ 11 ] + P [ 3 ] [ 4 ] * SF [ 10 ] + P [ 10 ] [ 4 ] * SF [ 14 ] + P [ 11 ] [ 4 ] * SF [ 15 ] + P [ 12 ] [ 4 ] * SPP [ 10 ] + SF [ 5 ] * ( P [ 0 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 9 ] + P [ 2 ] [ 0 ] * SF [ 11 ] + P [ 3 ] [ 0 ] * SF [ 10 ] + P [ 10 ] [ 0 ] * SF [ 14 ] + P [ 11 ] [ 0 ] * SF [ 15 ] + P [ 12 ] [ 0 ] * SPP [ 10 ] ) + SF [ 3 ] * ( P [ 0 ] [ 1 ] + P [ 1 ] [ 1 ] * SF [ 9 ] + P [ 2 ] [ 1 ] * SF [ 11 ] + P [ 3 ] [ 1 ] * SF [ 10 ] + P [ 10 ] [ 1 ] * SF [ 14 ] + P [ 11 ] [ 1 ] * SF [ 15 ] + P [ 12 ] [ 1 ] * SPP [ 10 ] ) - SF [ 4 ] * ( P [ 0 ] [ 3 ] + P [ 1 ] [ 3 ] * SF [ 9 ] + P [ 2 ] [ 3 ] * SF [ 11 ] + P [ 3 ] [ 3 ] * SF [ 10 ] + P [ 10 ] [ 3 ] * SF [ 14 ] + P [ 11 ] [ 3 ] * SF [ 15 ] + P [ 12 ] [ 3 ] * SPP [ 10 ] ) + SPP [ 0 ] * ( P [ 0 ] [ 2 ] + P [ 1 ] [ 2 ] * SF [ 9 ] + P [ 2 ] [ 2 ] * SF [ 11 ] + P [ 3 ] [ 2 ] * SF [ 10 ] + P [ 10 ] [ 2 ] * SF [ 14 ] + P [ 11 ] [ 2 ] * SF [ 15 ] + P [ 12 ] [ 2 ] * SPP [ 10 ] ) + SPP [ 3 ] * ( P [ 0 ] [ 13 ] + P [ 1 ] [ 13 ] * SF [ 9 ] + P [ 2 ] [ 13 ] * SF [ 11 ] + P [ 3 ] [ 13 ] * SF [ 10 ] + P [ 10 ] [ 13 ] * SF [ 14 ] + P [ 11 ] [ 13 ] * SF [ 15 ] + P [ 12 ] [ 13 ] * SPP [ 10 ] ) + SPP [ 6 ] * ( P [ 0 ] [ 14 ] + P [ 1 ] [ 14 ] * SF [ 9 ] + P [ 2 ] [ 14 ] * SF [ 11 ] + P [ 3 ] [ 14 ] * SF [ 10 ] + P [ 10 ] [ 14 ] * SF [ 14 ] + P [ 11 ] [ 14 ] * SF [ 15 ] + P [ 12 ] [ 14 ] * SPP [ 10 ] ) - SPP [ 9 ] * ( P [ 0 ] [ 15 ] + P [ 1 ] [ 15 ] * SF [ 9 ] + P [ 2 ] [ 15 ] * SF [ 11 ] + P [ 3 ] [ 15 ] * SF [ 10 ] + P [ 10 ] [ 15 ] * SF [ 14 ] + P [ 11 ] [ 15 ] * SF [ 15 ] + P [ 12 ] [ 15 ] * SPP [ 10 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 4 ] = P [ 1 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 8 ] + P [ 2 ] [ 4 ] * SF [ 7 ] + P [ 3 ] [ 4 ] * SF [ 11 ] - P [ 12 ] [ 4 ] * SF [ 15 ] + P [ 11 ] [ 4 ] * SPP [ 10 ] - ( P [ 10 ] [ 4 ] * q0 ) / 2 + SF [ 5 ] * ( P [ 1 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 8 ] + P [ 2 ] [ 0 ] * SF [ 7 ] + P [ 3 ] [ 0 ] * SF [ 11 ] - P [ 12 ] [ 0 ] * SF [ 15 ] + P [ 11 ] [ 0 ] * SPP [ 10 ] - ( P [ 10 ] [ 0 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 1 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 8 ] + P [ 2 ] [ 1 ] * SF [ 7 ] + P [ 3 ] [ 1 ] * SF [ 11 ] - P [ 12 ] [ 1 ] * SF [ 15 ] + P [ 11 ] [ 1 ] * SPP [ 10 ] - ( P [ 10 ] [ 1 ] * q0 ) / 2 ) - SF [ 4 ] * ( P [ 1 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 8 ] + P [ 2 ] [ 3 ] * SF [ 7 ] + P [ 3 ] [ 3 ] * SF [ 11 ] - P [ 12 ] [ 3 ] * SF [ 15 ] + P [ 11 ] [ 3 ] * SPP [ 10 ] - ( P [ 10 ] [ 3 ] * q0 ) / 2 ) + SPP [ 0 ] * ( P [ 1 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 8 ] + P [ 2 ] [ 2 ] * SF [ 7 ] + P [ 3 ] [ 2 ] * SF [ 11 ] - P [ 12 ] [ 2 ] * SF [ 15 ] + P [ 11 ] [ 2 ] * SPP [ 10 ] - ( P [ 10 ] [ 2 ] * q0 ) / 2 ) + SPP [ 3 ] * ( P [ 1 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 8 ] + P [ 2 ] [ 13 ] * SF [ 7 ] + P [ 3 ] [ 13 ] * SF [ 11 ] - P [ 12 ] [ 13 ] * SF [ 15 ] + P [ 11 ] [ 13 ] * SPP [ 10 ] - ( P [ 10 ] [ 13 ] * q0 ) / 2 ) + SPP [ 6 ] * ( P [ 1 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 8 ] + P [ 2 ] [ 14 ] * SF [ 7 ] + P [ 3 ] [ 14 ] * SF [ 11 ] - P [ 12 ] [ 14 ] * SF [ 15 ] + P [ 11 ] [ 14 ] * SPP [ 10 ] - ( P [ 10 ] [ 14 ] * q0 ) / 2 ) - SPP [ 9 ] * ( P [ 1 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 8 ] + P [ 2 ] [ 15 ] * SF [ 7 ] + P [ 3 ] [ 15 ] * SF [ 11 ] - P [ 12 ] [ 15 ] * SF [ 15 ] + P [ 11 ] [ 15 ] * SPP [ 10 ] - ( P [ 10 ] [ 15 ] * q0 ) / 2 ) ;
nextP [ 2 ] [ 4 ] = P [ 2 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 6 ] + P [ 1 ] [ 4 ] * SF [ 10 ] + P [ 3 ] [ 4 ] * SF [ 8 ] + P [ 12 ] [ 4 ] * SF [ 14 ] - P [ 10 ] [ 4 ] * SPP [ 10 ] - ( P [ 11 ] [ 4 ] * q0 ) / 2 + SF [ 5 ] * ( P [ 2 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 6 ] + P [ 1 ] [ 0 ] * SF [ 10 ] + P [ 3 ] [ 0 ] * SF [ 8 ] + P [ 12 ] [ 0 ] * SF [ 14 ] - P [ 10 ] [ 0 ] * SPP [ 10 ] - ( P [ 11 ] [ 0 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 2 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 6 ] + P [ 1 ] [ 1 ] * SF [ 10 ] + P [ 3 ] [ 1 ] * SF [ 8 ] + P [ 12 ] [ 1 ] * SF [ 14 ] - P [ 10 ] [ 1 ] * SPP [ 10 ] - ( P [ 11 ] [ 1 ] * q0 ) / 2 ) - SF [ 4 ] * ( P [ 2 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 6 ] + P [ 1 ] [ 3 ] * SF [ 10 ] + P [ 3 ] [ 3 ] * SF [ 8 ] + P [ 12 ] [ 3 ] * SF [ 14 ] - P [ 10 ] [ 3 ] * SPP [ 10 ] - ( P [ 11 ] [ 3 ] * q0 ) / 2 ) + SPP [ 0 ] * ( P [ 2 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 6 ] + P [ 1 ] [ 2 ] * SF [ 10 ] + P [ 3 ] [ 2 ] * SF [ 8 ] + P [ 12 ] [ 2 ] * SF [ 14 ] - P [ 10 ] [ 2 ] * SPP [ 10 ] - ( P [ 11 ] [ 2 ] * q0 ) / 2 ) + SPP [ 3 ] * ( P [ 2 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 6 ] + P [ 1 ] [ 13 ] * SF [ 10 ] + P [ 3 ] [ 13 ] * SF [ 8 ] + P [ 12 ] [ 13 ] * SF [ 14 ] - P [ 10 ] [ 13 ] * SPP [ 10 ] - ( P [ 11 ] [ 13 ] * q0 ) / 2 ) + SPP [ 6 ] * ( P [ 2 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 6 ] + P [ 1 ] [ 14 ] * SF [ 10 ] + P [ 3 ] [ 14 ] * SF [ 8 ] + P [ 12 ] [ 14 ] * SF [ 14 ] - P [ 10 ] [ 14 ] * SPP [ 10 ] - ( P [ 11 ] [ 14 ] * q0 ) / 2 ) - SPP [ 9 ] * ( P [ 2 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 6 ] + P [ 1 ] [ 15 ] * SF [ 10 ] + P [ 3 ] [ 15 ] * SF [ 8 ] + P [ 12 ] [ 15 ] * SF [ 14 ] - P [ 10 ] [ 15 ] * SPP [ 10 ] - ( P [ 11 ] [ 15 ] * q0 ) / 2 ) ;
nextP [ 3 ] [ 4 ] = P [ 3 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 7 ] + P [ 1 ] [ 4 ] * SF [ 6 ] + P [ 2 ] [ 4 ] * SF [ 9 ] + P [ 10 ] [ 4 ] * SF [ 15 ] - P [ 11 ] [ 4 ] * SF [ 14 ] - ( P [ 12 ] [ 4 ] * q0 ) / 2 + SF [ 5 ] * ( P [ 3 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 7 ] + P [ 1 ] [ 0 ] * SF [ 6 ] + P [ 2 ] [ 0 ] * SF [ 9 ] + P [ 10 ] [ 0 ] * SF [ 15 ] - P [ 11 ] [ 0 ] * SF [ 14 ] - ( P [ 12 ] [ 0 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 3 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 7 ] + P [ 1 ] [ 1 ] * SF [ 6 ] + P [ 2 ] [ 1 ] * SF [ 9 ] + P [ 10 ] [ 1 ] * SF [ 15 ] - P [ 11 ] [ 1 ] * SF [ 14 ] - ( P [ 12 ] [ 1 ] * q0 ) / 2 ) - SF [ 4 ] * ( P [ 3 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 7 ] + P [ 1 ] [ 3 ] * SF [ 6 ] + P [ 2 ] [ 3 ] * SF [ 9 ] + P [ 10 ] [ 3 ] * SF [ 15 ] - P [ 11 ] [ 3 ] * SF [ 14 ] - ( P [ 12 ] [ 3 ] * q0 ) / 2 ) + SPP [ 0 ] * ( P [ 3 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 7 ] + P [ 1 ] [ 2 ] * SF [ 6 ] + P [ 2 ] [ 2 ] * SF [ 9 ] + P [ 10 ] [ 2 ] * SF [ 15 ] - P [ 11 ] [ 2 ] * SF [ 14 ] - ( P [ 12 ] [ 2 ] * q0 ) / 2 ) + SPP [ 3 ] * ( P [ 3 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 7 ] + P [ 1 ] [ 13 ] * SF [ 6 ] + P [ 2 ] [ 13 ] * SF [ 9 ] + P [ 10 ] [ 13 ] * SF [ 15 ] - P [ 11 ] [ 13 ] * SF [ 14 ] - ( P [ 12 ] [ 13 ] * q0 ) / 2 ) + SPP [ 6 ] * ( P [ 3 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 7 ] + P [ 1 ] [ 14 ] * SF [ 6 ] + P [ 2 ] [ 14 ] * SF [ 9 ] + P [ 10 ] [ 14 ] * SF [ 15 ] - P [ 11 ] [ 14 ] * SF [ 14 ] - ( P [ 12 ] [ 14 ] * q0 ) / 2 ) - SPP [ 9 ] * ( P [ 3 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 7 ] + P [ 1 ] [ 15 ] * SF [ 6 ] + P [ 2 ] [ 15 ] * SF [ 9 ] + P [ 10 ] [ 15 ] * SF [ 15 ] - P [ 11 ] [ 15 ] * SF [ 14 ] - ( P [ 12 ] [ 15 ] * q0 ) / 2 ) ;
nextP [ 4 ] [ 4 ] = P [ 4 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 5 ] + P [ 1 ] [ 4 ] * SF [ 3 ] - P [ 3 ] [ 4 ] * SF [ 4 ] + P [ 2 ] [ 4 ] * SPP [ 0 ] + P [ 13 ] [ 4 ] * SPP [ 3 ] + P [ 14 ] [ 4 ] * SPP [ 6 ] - P [ 15 ] [ 4 ] * SPP [ 9 ] + dvyVar * sq ( SG [ 7 ] - 2 * q0 * q3 ) + dvzVar * sq ( SG [ 6 ] + 2 * q0 * q2 ) + SF [ 5 ] * ( P [ 4 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 5 ] + P [ 1 ] [ 0 ] * SF [ 3 ] - P [ 3 ] [ 0 ] * SF [ 4 ] + P [ 2 ] [ 0 ] * SPP [ 0 ] + P [ 13 ] [ 0 ] * SPP [ 3 ] + P [ 14 ] [ 0 ] * SPP [ 6 ] - P [ 15 ] [ 0 ] * SPP [ 9 ] ) + SF [ 3 ] * ( P [ 4 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 5 ] + P [ 1 ] [ 1 ] * SF [ 3 ] - P [ 3 ] [ 1 ] * SF [ 4 ] + P [ 2 ] [ 1 ] * SPP [ 0 ] + P [ 13 ] [ 1 ] * SPP [ 3 ] + P [ 14 ] [ 1 ] * SPP [ 6 ] - P [ 15 ] [ 1 ] * SPP [ 9 ] ) - SF [ 4 ] * ( P [ 4 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 5 ] + P [ 1 ] [ 3 ] * SF [ 3 ] - P [ 3 ] [ 3 ] * SF [ 4 ] + P [ 2 ] [ 3 ] * SPP [ 0 ] + P [ 13 ] [ 3 ] * SPP [ 3 ] + P [ 14 ] [ 3 ] * SPP [ 6 ] - P [ 15 ] [ 3 ] * SPP [ 9 ] ) + SPP [ 0 ] * ( P [ 4 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 5 ] + P [ 1 ] [ 2 ] * SF [ 3 ] - P [ 3 ] [ 2 ] * SF [ 4 ] + P [ 2 ] [ 2 ] * SPP [ 0 ] + P [ 13 ] [ 2 ] * SPP [ 3 ] + P [ 14 ] [ 2 ] * SPP [ 6 ] - P [ 15 ] [ 2 ] * SPP [ 9 ] ) + SPP [ 3 ] * ( P [ 4 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 5 ] + P [ 1 ] [ 13 ] * SF [ 3 ] - P [ 3 ] [ 13 ] * SF [ 4 ] + P [ 2 ] [ 13 ] * SPP [ 0 ] + P [ 13 ] [ 13 ] * SPP [ 3 ] + P [ 14 ] [ 13 ] * SPP [ 6 ] - P [ 15 ] [ 13 ] * SPP [ 9 ] ) + SPP [ 6 ] * ( P [ 4 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 5 ] + P [ 1 ] [ 14 ] * SF [ 3 ] - P [ 3 ] [ 14 ] * SF [ 4 ] + P [ 2 ] [ 14 ] * SPP [ 0 ] + P [ 13 ] [ 14 ] * SPP [ 3 ] + P [ 14 ] [ 14 ] * SPP [ 6 ] - P [ 15 ] [ 14 ] * SPP [ 9 ] ) - SPP [ 9 ] * ( P [ 4 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 5 ] + P [ 1 ] [ 15 ] * SF [ 3 ] - P [ 3 ] [ 15 ] * SF [ 4 ] + P [ 2 ] [ 15 ] * SPP [ 0 ] + P [ 13 ] [ 15 ] * SPP [ 3 ] + P [ 14 ] [ 15 ] * SPP [ 6 ] - P [ 15 ] [ 15 ] * SPP [ 9 ] ) + dvxVar * sq ( SG [ 1 ] + SG [ 2 ] - SG [ 3 ] - SG [ 4 ] ) ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 5 ] = P [ 0 ] [ 5 ] + P [ 1 ] [ 5 ] * SF [ 9 ] + P [ 2 ] [ 5 ] * SF [ 11 ] + P [ 3 ] [ 5 ] * SF [ 10 ] + P [ 10 ] [ 5 ] * SF [ 14 ] + P [ 11 ] [ 5 ] * SF [ 15 ] + P [ 12 ] [ 5 ] * SPP [ 10 ] + SF [ 4 ] * ( P [ 0 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 9 ] + P [ 2 ] [ 0 ] * SF [ 11 ] + P [ 3 ] [ 0 ] * SF [ 10 ] + P [ 10 ] [ 0 ] * SF [ 14 ] + P [ 11 ] [ 0 ] * SF [ 15 ] + P [ 12 ] [ 0 ] * SPP [ 10 ] ) + SF [ 3 ] * ( P [ 0 ] [ 2 ] + P [ 1 ] [ 2 ] * SF [ 9 ] + P [ 2 ] [ 2 ] * SF [ 11 ] + P [ 3 ] [ 2 ] * SF [ 10 ] + P [ 10 ] [ 2 ] * SF [ 14 ] + P [ 11 ] [ 2 ] * SF [ 15 ] + P [ 12 ] [ 2 ] * SPP [ 10 ] ) + SF [ 5 ] * ( P [ 0 ] [ 3 ] + P [ 1 ] [ 3 ] * SF [ 9 ] + P [ 2 ] [ 3 ] * SF [ 11 ] + P [ 3 ] [ 3 ] * SF [ 10 ] + P [ 10 ] [ 3 ] * SF [ 14 ] + P [ 11 ] [ 3 ] * SF [ 15 ] + P [ 12 ] [ 3 ] * SPP [ 10 ] ) - SPP [ 0 ] * ( P [ 0 ] [ 1 ] + P [ 1 ] [ 1 ] * SF [ 9 ] + P [ 2 ] [ 1 ] * SF [ 11 ] + P [ 3 ] [ 1 ] * SF [ 10 ] + P [ 10 ] [ 1 ] * SF [ 14 ] + P [ 11 ] [ 1 ] * SF [ 15 ] + P [ 12 ] [ 1 ] * SPP [ 10 ] ) - SPP [ 8 ] * ( P [ 0 ] [ 13 ] + P [ 1 ] [ 13 ] * SF [ 9 ] + P [ 2 ] [ 13 ] * SF [ 11 ] + P [ 3 ] [ 13 ] * SF [ 10 ] + P [ 10 ] [ 13 ] * SF [ 14 ] + P [ 11 ] [ 13 ] * SF [ 15 ] + P [ 12 ] [ 13 ] * SPP [ 10 ] ) + SPP [ 2 ] * ( P [ 0 ] [ 14 ] + P [ 1 ] [ 14 ] * SF [ 9 ] + P [ 2 ] [ 14 ] * SF [ 11 ] + P [ 3 ] [ 14 ] * SF [ 10 ] + P [ 10 ] [ 14 ] * SF [ 14 ] + P [ 11 ] [ 14 ] * SF [ 15 ] + P [ 12 ] [ 14 ] * SPP [ 10 ] ) + SPP [ 5 ] * ( P [ 0 ] [ 15 ] + P [ 1 ] [ 15 ] * SF [ 9 ] + P [ 2 ] [ 15 ] * SF [ 11 ] + P [ 3 ] [ 15 ] * SF [ 10 ] + P [ 10 ] [ 15 ] * SF [ 14 ] + P [ 11 ] [ 15 ] * SF [ 15 ] + P [ 12 ] [ 15 ] * SPP [ 10 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 5 ] = P [ 1 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 8 ] + P [ 2 ] [ 5 ] * SF [ 7 ] + P [ 3 ] [ 5 ] * SF [ 11 ] - P [ 12 ] [ 5 ] * SF [ 15 ] + P [ 11 ] [ 5 ] * SPP [ 10 ] - ( P [ 10 ] [ 5 ] * q0 ) / 2 + SF [ 4 ] * ( P [ 1 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 8 ] + P [ 2 ] [ 0 ] * SF [ 7 ] + P [ 3 ] [ 0 ] * SF [ 11 ] - P [ 12 ] [ 0 ] * SF [ 15 ] + P [ 11 ] [ 0 ] * SPP [ 10 ] - ( P [ 10 ] [ 0 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 1 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 8 ] + P [ 2 ] [ 2 ] * SF [ 7 ] + P [ 3 ] [ 2 ] * SF [ 11 ] - P [ 12 ] [ 2 ] * SF [ 15 ] + P [ 11 ] [ 2 ] * SPP [ 10 ] - ( P [ 10 ] [ 2 ] * q0 ) / 2 ) + SF [ 5 ] * ( P [ 1 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 8 ] + P [ 2 ] [ 3 ] * SF [ 7 ] + P [ 3 ] [ 3 ] * SF [ 11 ] - P [ 12 ] [ 3 ] * SF [ 15 ] + P [ 11 ] [ 3 ] * SPP [ 10 ] - ( P [ 10 ] [ 3 ] * q0 ) / 2 ) - SPP [ 0 ] * ( P [ 1 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 8 ] + P [ 2 ] [ 1 ] * SF [ 7 ] + P [ 3 ] [ 1 ] * SF [ 11 ] - P [ 12 ] [ 1 ] * SF [ 15 ] + P [ 11 ] [ 1 ] * SPP [ 10 ] - ( P [ 10 ] [ 1 ] * q0 ) / 2 ) - SPP [ 8 ] * ( P [ 1 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 8 ] + P [ 2 ] [ 13 ] * SF [ 7 ] + P [ 3 ] [ 13 ] * SF [ 11 ] - P [ 12 ] [ 13 ] * SF [ 15 ] + P [ 11 ] [ 13 ] * SPP [ 10 ] - ( P [ 10 ] [ 13 ] * q0 ) / 2 ) + SPP [ 2 ] * ( P [ 1 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 8 ] + P [ 2 ] [ 14 ] * SF [ 7 ] + P [ 3 ] [ 14 ] * SF [ 11 ] - P [ 12 ] [ 14 ] * SF [ 15 ] + P [ 11 ] [ 14 ] * SPP [ 10 ] - ( P [ 10 ] [ 14 ] * q0 ) / 2 ) + SPP [ 5 ] * ( P [ 1 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 8 ] + P [ 2 ] [ 15 ] * SF [ 7 ] + P [ 3 ] [ 15 ] * SF [ 11 ] - P [ 12 ] [ 15 ] * SF [ 15 ] + P [ 11 ] [ 15 ] * SPP [ 10 ] - ( P [ 10 ] [ 15 ] * q0 ) / 2 ) ;
nextP [ 2 ] [ 5 ] = P [ 2 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 6 ] + P [ 1 ] [ 5 ] * SF [ 10 ] + P [ 3 ] [ 5 ] * SF [ 8 ] + P [ 12 ] [ 5 ] * SF [ 14 ] - P [ 10 ] [ 5 ] * SPP [ 10 ] - ( P [ 11 ] [ 5 ] * q0 ) / 2 + SF [ 4 ] * ( P [ 2 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 6 ] + P [ 1 ] [ 0 ] * SF [ 10 ] + P [ 3 ] [ 0 ] * SF [ 8 ] + P [ 12 ] [ 0 ] * SF [ 14 ] - P [ 10 ] [ 0 ] * SPP [ 10 ] - ( P [ 11 ] [ 0 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 2 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 6 ] + P [ 1 ] [ 2 ] * SF [ 10 ] + P [ 3 ] [ 2 ] * SF [ 8 ] + P [ 12 ] [ 2 ] * SF [ 14 ] - P [ 10 ] [ 2 ] * SPP [ 10 ] - ( P [ 11 ] [ 2 ] * q0 ) / 2 ) + SF [ 5 ] * ( P [ 2 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 6 ] + P [ 1 ] [ 3 ] * SF [ 10 ] + P [ 3 ] [ 3 ] * SF [ 8 ] + P [ 12 ] [ 3 ] * SF [ 14 ] - P [ 10 ] [ 3 ] * SPP [ 10 ] - ( P [ 11 ] [ 3 ] * q0 ) / 2 ) - SPP [ 0 ] * ( P [ 2 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 6 ] + P [ 1 ] [ 1 ] * SF [ 10 ] + P [ 3 ] [ 1 ] * SF [ 8 ] + P [ 12 ] [ 1 ] * SF [ 14 ] - P [ 10 ] [ 1 ] * SPP [ 10 ] - ( P [ 11 ] [ 1 ] * q0 ) / 2 ) - SPP [ 8 ] * ( P [ 2 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 6 ] + P [ 1 ] [ 13 ] * SF [ 10 ] + P [ 3 ] [ 13 ] * SF [ 8 ] + P [ 12 ] [ 13 ] * SF [ 14 ] - P [ 10 ] [ 13 ] * SPP [ 10 ] - ( P [ 11 ] [ 13 ] * q0 ) / 2 ) + SPP [ 2 ] * ( P [ 2 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 6 ] + P [ 1 ] [ 14 ] * SF [ 10 ] + P [ 3 ] [ 14 ] * SF [ 8 ] + P [ 12 ] [ 14 ] * SF [ 14 ] - P [ 10 ] [ 14 ] * SPP [ 10 ] - ( P [ 11 ] [ 14 ] * q0 ) / 2 ) + SPP [ 5 ] * ( P [ 2 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 6 ] + P [ 1 ] [ 15 ] * SF [ 10 ] + P [ 3 ] [ 15 ] * SF [ 8 ] + P [ 12 ] [ 15 ] * SF [ 14 ] - P [ 10 ] [ 15 ] * SPP [ 10 ] - ( P [ 11 ] [ 15 ] * q0 ) / 2 ) ;
nextP [ 3 ] [ 5 ] = P [ 3 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 7 ] + P [ 1 ] [ 5 ] * SF [ 6 ] + P [ 2 ] [ 5 ] * SF [ 9 ] + P [ 10 ] [ 5 ] * SF [ 15 ] - P [ 11 ] [ 5 ] * SF [ 14 ] - ( P [ 12 ] [ 5 ] * q0 ) / 2 + SF [ 4 ] * ( P [ 3 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 7 ] + P [ 1 ] [ 0 ] * SF [ 6 ] + P [ 2 ] [ 0 ] * SF [ 9 ] + P [ 10 ] [ 0 ] * SF [ 15 ] - P [ 11 ] [ 0 ] * SF [ 14 ] - ( P [ 12 ] [ 0 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 3 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 7 ] + P [ 1 ] [ 2 ] * SF [ 6 ] + P [ 2 ] [ 2 ] * SF [ 9 ] + P [ 10 ] [ 2 ] * SF [ 15 ] - P [ 11 ] [ 2 ] * SF [ 14 ] - ( P [ 12 ] [ 2 ] * q0 ) / 2 ) + SF [ 5 ] * ( P [ 3 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 7 ] + P [ 1 ] [ 3 ] * SF [ 6 ] + P [ 2 ] [ 3 ] * SF [ 9 ] + P [ 10 ] [ 3 ] * SF [ 15 ] - P [ 11 ] [ 3 ] * SF [ 14 ] - ( P [ 12 ] [ 3 ] * q0 ) / 2 ) - SPP [ 0 ] * ( P [ 3 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 7 ] + P [ 1 ] [ 1 ] * SF [ 6 ] + P [ 2 ] [ 1 ] * SF [ 9 ] + P [ 10 ] [ 1 ] * SF [ 15 ] - P [ 11 ] [ 1 ] * SF [ 14 ] - ( P [ 12 ] [ 1 ] * q0 ) / 2 ) - SPP [ 8 ] * ( P [ 3 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 7 ] + P [ 1 ] [ 13 ] * SF [ 6 ] + P [ 2 ] [ 13 ] * SF [ 9 ] + P [ 10 ] [ 13 ] * SF [ 15 ] - P [ 11 ] [ 13 ] * SF [ 14 ] - ( P [ 12 ] [ 13 ] * q0 ) / 2 ) + SPP [ 2 ] * ( P [ 3 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 7 ] + P [ 1 ] [ 14 ] * SF [ 6 ] + P [ 2 ] [ 14 ] * SF [ 9 ] + P [ 10 ] [ 14 ] * SF [ 15 ] - P [ 11 ] [ 14 ] * SF [ 14 ] - ( P [ 12 ] [ 14 ] * q0 ) / 2 ) + SPP [ 5 ] * ( P [ 3 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 7 ] + P [ 1 ] [ 15 ] * SF [ 6 ] + P [ 2 ] [ 15 ] * SF [ 9 ] + P [ 10 ] [ 15 ] * SF [ 15 ] - P [ 11 ] [ 15 ] * SF [ 14 ] - ( P [ 12 ] [ 15 ] * q0 ) / 2 ) ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 5 ] = P [ 4 ] [ 5 ] + SQ [ 2 ] + P [ 0 ] [ 5 ] * SF [ 5 ] + P [ 1 ] [ 5 ] * SF [ 3 ] - P [ 3 ] [ 5 ] * SF [ 4 ] + P [ 2 ] [ 5 ] * SPP [ 0 ] + P [ 13 ] [ 5 ] * SPP [ 3 ] + P [ 14 ] [ 5 ] * SPP [ 6 ] - P [ 15 ] [ 5 ] * SPP [ 9 ] + SF [ 4 ] * ( P [ 4 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 5 ] + P [ 1 ] [ 0 ] * SF [ 3 ] - P [ 3 ] [ 0 ] * SF [ 4 ] + P [ 2 ] [ 0 ] * SPP [ 0 ] + P [ 13 ] [ 0 ] * SPP [ 3 ] + P [ 14 ] [ 0 ] * SPP [ 6 ] - P [ 15 ] [ 0 ] * SPP [ 9 ] ) + SF [ 3 ] * ( P [ 4 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 5 ] + P [ 1 ] [ 2 ] * SF [ 3 ] - P [ 3 ] [ 2 ] * SF [ 4 ] + P [ 2 ] [ 2 ] * SPP [ 0 ] + P [ 13 ] [ 2 ] * SPP [ 3 ] + P [ 14 ] [ 2 ] * SPP [ 6 ] - P [ 15 ] [ 2 ] * SPP [ 9 ] ) + SF [ 5 ] * ( P [ 4 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 5 ] + P [ 1 ] [ 3 ] * SF [ 3 ] - P [ 3 ] [ 3 ] * SF [ 4 ] + P [ 2 ] [ 3 ] * SPP [ 0 ] + P [ 13 ] [ 3 ] * SPP [ 3 ] + P [ 14 ] [ 3 ] * SPP [ 6 ] - P [ 15 ] [ 3 ] * SPP [ 9 ] ) - SPP [ 0 ] * ( P [ 4 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 5 ] + P [ 1 ] [ 1 ] * SF [ 3 ] - P [ 3 ] [ 1 ] * SF [ 4 ] + P [ 2 ] [ 1 ] * SPP [ 0 ] + P [ 13 ] [ 1 ] * SPP [ 3 ] + P [ 14 ] [ 1 ] * SPP [ 6 ] - P [ 15 ] [ 1 ] * SPP [ 9 ] ) - SPP [ 8 ] * ( P [ 4 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 5 ] + P [ 1 ] [ 13 ] * SF [ 3 ] - P [ 3 ] [ 13 ] * SF [ 4 ] + P [ 2 ] [ 13 ] * SPP [ 0 ] + P [ 13 ] [ 13 ] * SPP [ 3 ] + P [ 14 ] [ 13 ] * SPP [ 6 ] - P [ 15 ] [ 13 ] * SPP [ 9 ] ) + SPP [ 2 ] * ( P [ 4 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 5 ] + P [ 1 ] [ 14 ] * SF [ 3 ] - P [ 3 ] [ 14 ] * SF [ 4 ] + P [ 2 ] [ 14 ] * SPP [ 0 ] + P [ 13 ] [ 14 ] * SPP [ 3 ] + P [ 14 ] [ 14 ] * SPP [ 6 ] - P [ 15 ] [ 14 ] * SPP [ 9 ] ) + SPP [ 5 ] * ( P [ 4 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 5 ] + P [ 1 ] [ 15 ] * SF [ 3 ] - P [ 3 ] [ 15 ] * SF [ 4 ] + P [ 2 ] [ 15 ] * SPP [ 0 ] + P [ 13 ] [ 15 ] * SPP [ 3 ] + P [ 14 ] [ 15 ] * SPP [ 6 ] - P [ 15 ] [ 15 ] * SPP [ 9 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 5 ] [ 5 ] = P [ 5 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 4 ] + P [ 2 ] [ 5 ] * SF [ 3 ] + P [ 3 ] [ 5 ] * SF [ 5 ] - P [ 1 ] [ 5 ] * SPP [ 0 ] - P [ 13 ] [ 5 ] * SPP [ 8 ] + P [ 14 ] [ 5 ] * SPP [ 2 ] + P [ 15 ] [ 5 ] * SPP [ 5 ] + dvxVar * sq ( SG [ 7 ] + 2 * q0 * q3 ) + dvzVar * sq ( SG [ 5 ] - 2 * q0 * q1 ) + SF [ 4 ] * ( P [ 5 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 4 ] + P [ 2 ] [ 0 ] * SF [ 3 ] + P [ 3 ] [ 0 ] * SF [ 5 ] - P [ 1 ] [ 0 ] * SPP [ 0 ] - P [ 13 ] [ 0 ] * SPP [ 8 ] + P [ 14 ] [ 0 ] * SPP [ 2 ] + P [ 15 ] [ 0 ] * SPP [ 5 ] ) + SF [ 3 ] * ( P [ 5 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 4 ] + P [ 2 ] [ 2 ] * SF [ 3 ] + P [ 3 ] [ 2 ] * SF [ 5 ] - P [ 1 ] [ 2 ] * SPP [ 0 ] - P [ 13 ] [ 2 ] * SPP [ 8 ] + P [ 14 ] [ 2 ] * SPP [ 2 ] + P [ 15 ] [ 2 ] * SPP [ 5 ] ) + SF [ 5 ] * ( P [ 5 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 4 ] + P [ 2 ] [ 3 ] * SF [ 3 ] + P [ 3 ] [ 3 ] * SF [ 5 ] - P [ 1 ] [ 3 ] * SPP [ 0 ] - P [ 13 ] [ 3 ] * SPP [ 8 ] + P [ 14 ] [ 3 ] * SPP [ 2 ] + P [ 15 ] [ 3 ] * SPP [ 5 ] ) - SPP [ 0 ] * ( P [ 5 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 4 ] + P [ 2 ] [ 1 ] * SF [ 3 ] + P [ 3 ] [ 1 ] * SF [ 5 ] - P [ 1 ] [ 1 ] * SPP [ 0 ] - P [ 13 ] [ 1 ] * SPP [ 8 ] + P [ 14 ] [ 1 ] * SPP [ 2 ] + P [ 15 ] [ 1 ] * SPP [ 5 ] ) - SPP [ 8 ] * ( P [ 5 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 4 ] + P [ 2 ] [ 13 ] * SF [ 3 ] + P [ 3 ] [ 13 ] * SF [ 5 ] - P [ 1 ] [ 13 ] * SPP [ 0 ] - P [ 13 ] [ 13 ] * SPP [ 8 ] + P [ 14 ] [ 13 ] * SPP [ 2 ] + P [ 15 ] [ 13 ] * SPP [ 5 ] ) + SPP [ 2 ] * ( P [ 5 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 4 ] + P [ 2 ] [ 14 ] * SF [ 3 ] + P [ 3 ] [ 14 ] * SF [ 5 ] - P [ 1 ] [ 14 ] * SPP [ 0 ] - P [ 13 ] [ 14 ] * SPP [ 8 ] + P [ 14 ] [ 14 ] * SPP [ 2 ] + P [ 15 ] [ 14 ] * SPP [ 5 ] ) + SPP [ 5 ] * ( P [ 5 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 4 ] + P [ 2 ] [ 15 ] * SF [ 3 ] + P [ 3 ] [ 15 ] * SF [ 5 ] - P [ 1 ] [ 15 ] * SPP [ 0 ] - P [ 13 ] [ 15 ] * SPP [ 8 ] + P [ 14 ] [ 15 ] * SPP [ 2 ] + P [ 15 ] [ 15 ] * SPP [ 5 ] ) + dvyVar * sq ( SG [ 1 ] - SG [ 2 ] + SG [ 3 ] - SG [ 4 ] ) ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 6 ] = P [ 0 ] [ 6 ] + P [ 1 ] [ 6 ] * SF [ 9 ] + P [ 2 ] [ 6 ] * SF [ 11 ] + P [ 3 ] [ 6 ] * SF [ 10 ] + P [ 10 ] [ 6 ] * SF [ 14 ] + P [ 11 ] [ 6 ] * SF [ 15 ] + P [ 12 ] [ 6 ] * SPP [ 10 ] + SF [ 4 ] * ( P [ 0 ] [ 1 ] + P [ 1 ] [ 1 ] * SF [ 9 ] + P [ 2 ] [ 1 ] * SF [ 11 ] + P [ 3 ] [ 1 ] * SF [ 10 ] + P [ 10 ] [ 1 ] * SF [ 14 ] + P [ 11 ] [ 1 ] * SF [ 15 ] + P [ 12 ] [ 1 ] * SPP [ 10 ] ) - SF [ 5 ] * ( P [ 0 ] [ 2 ] + P [ 1 ] [ 2 ] * SF [ 9 ] + P [ 2 ] [ 2 ] * SF [ 11 ] + P [ 3 ] [ 2 ] * SF [ 10 ] + P [ 10 ] [ 2 ] * SF [ 14 ] + P [ 11 ] [ 2 ] * SF [ 15 ] + P [ 12 ] [ 2 ] * SPP [ 10 ] ) + SF [ 3 ] * ( P [ 0 ] [ 3 ] + P [ 1 ] [ 3 ] * SF [ 9 ] + P [ 2 ] [ 3 ] * SF [ 11 ] + P [ 3 ] [ 3 ] * SF [ 10 ] + P [ 10 ] [ 3 ] * SF [ 14 ] + P [ 11 ] [ 3 ] * SF [ 15 ] + P [ 12 ] [ 3 ] * SPP [ 10 ] ) + SPP [ 0 ] * ( P [ 0 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 9 ] + P [ 2 ] [ 0 ] * SF [ 11 ] + P [ 3 ] [ 0 ] * SF [ 10 ] + P [ 10 ] [ 0 ] * SF [ 14 ] + P [ 11 ] [ 0 ] * SF [ 15 ] + P [ 12 ] [ 0 ] * SPP [ 10 ] ) + SPP [ 4 ] * ( P [ 0 ] [ 13 ] + P [ 1 ] [ 13 ] * SF [ 9 ] + P [ 2 ] [ 13 ] * SF [ 11 ] + P [ 3 ] [ 13 ] * SF [ 10 ] + P [ 10 ] [ 13 ] * SF [ 14 ] + P [ 11 ] [ 13 ] * SF [ 15 ] + P [ 12 ] [ 13 ] * SPP [ 10 ] ) - SPP [ 7 ] * ( P [ 0 ] [ 14 ] + P [ 1 ] [ 14 ] * SF [ 9 ] + P [ 2 ] [ 14 ] * SF [ 11 ] + P [ 3 ] [ 14 ] * SF [ 10 ] + P [ 10 ] [ 14 ] * SF [ 14 ] + P [ 11 ] [ 14 ] * SF [ 15 ] + P [ 12 ] [ 14 ] * SPP [ 10 ] ) - SPP [ 1 ] * ( P [ 0 ] [ 15 ] + P [ 1 ] [ 15 ] * SF [ 9 ] + P [ 2 ] [ 15 ] * SF [ 11 ] + P [ 3 ] [ 15 ] * SF [ 10 ] + P [ 10 ] [ 15 ] * SF [ 14 ] + P [ 11 ] [ 15 ] * SF [ 15 ] + P [ 12 ] [ 15 ] * SPP [ 10 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 6 ] = P [ 1 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 8 ] + P [ 2 ] [ 6 ] * SF [ 7 ] + P [ 3 ] [ 6 ] * SF [ 11 ] - P [ 12 ] [ 6 ] * SF [ 15 ] + P [ 11 ] [ 6 ] * SPP [ 10 ] - ( P [ 10 ] [ 6 ] * q0 ) / 2 + SF [ 4 ] * ( P [ 1 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 8 ] + P [ 2 ] [ 1 ] * SF [ 7 ] + P [ 3 ] [ 1 ] * SF [ 11 ] - P [ 12 ] [ 1 ] * SF [ 15 ] + P [ 11 ] [ 1 ] * SPP [ 10 ] - ( P [ 10 ] [ 1 ] * q0 ) / 2 ) - SF [ 5 ] * ( P [ 1 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 8 ] + P [ 2 ] [ 2 ] * SF [ 7 ] + P [ 3 ] [ 2 ] * SF [ 11 ] - P [ 12 ] [ 2 ] * SF [ 15 ] + P [ 11 ] [ 2 ] * SPP [ 10 ] - ( P [ 10 ] [ 2 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 1 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 8 ] + P [ 2 ] [ 3 ] * SF [ 7 ] + P [ 3 ] [ 3 ] * SF [ 11 ] - P [ 12 ] [ 3 ] * SF [ 15 ] + P [ 11 ] [ 3 ] * SPP [ 10 ] - ( P [ 10 ] [ 3 ] * q0 ) / 2 ) + SPP [ 0 ] * ( P [ 1 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 8 ] + P [ 2 ] [ 0 ] * SF [ 7 ] + P [ 3 ] [ 0 ] * SF [ 11 ] - P [ 12 ] [ 0 ] * SF [ 15 ] + P [ 11 ] [ 0 ] * SPP [ 10 ] - ( P [ 10 ] [ 0 ] * q0 ) / 2 ) + SPP [ 4 ] * ( P [ 1 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 8 ] + P [ 2 ] [ 13 ] * SF [ 7 ] + P [ 3 ] [ 13 ] * SF [ 11 ] - P [ 12 ] [ 13 ] * SF [ 15 ] + P [ 11 ] [ 13 ] * SPP [ 10 ] - ( P [ 10 ] [ 13 ] * q0 ) / 2 ) - SPP [ 7 ] * ( P [ 1 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 8 ] + P [ 2 ] [ 14 ] * SF [ 7 ] + P [ 3 ] [ 14 ] * SF [ 11 ] - P [ 12 ] [ 14 ] * SF [ 15 ] + P [ 11 ] [ 14 ] * SPP [ 10 ] - ( P [ 10 ] [ 14 ] * q0 ) / 2 ) - SPP [ 1 ] * ( P [ 1 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 8 ] + P [ 2 ] [ 15 ] * SF [ 7 ] + P [ 3 ] [ 15 ] * SF [ 11 ] - P [ 12 ] [ 15 ] * SF [ 15 ] + P [ 11 ] [ 15 ] * SPP [ 10 ] - ( P [ 10 ] [ 15 ] * q0 ) / 2 ) ;
nextP [ 2 ] [ 6 ] = P [ 2 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 6 ] + P [ 1 ] [ 6 ] * SF [ 10 ] + P [ 3 ] [ 6 ] * SF [ 8 ] + P [ 12 ] [ 6 ] * SF [ 14 ] - P [ 10 ] [ 6 ] * SPP [ 10 ] - ( P [ 11 ] [ 6 ] * q0 ) / 2 + SF [ 4 ] * ( P [ 2 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 6 ] + P [ 1 ] [ 1 ] * SF [ 10 ] + P [ 3 ] [ 1 ] * SF [ 8 ] + P [ 12 ] [ 1 ] * SF [ 14 ] - P [ 10 ] [ 1 ] * SPP [ 10 ] - ( P [ 11 ] [ 1 ] * q0 ) / 2 ) - SF [ 5 ] * ( P [ 2 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 6 ] + P [ 1 ] [ 2 ] * SF [ 10 ] + P [ 3 ] [ 2 ] * SF [ 8 ] + P [ 12 ] [ 2 ] * SF [ 14 ] - P [ 10 ] [ 2 ] * SPP [ 10 ] - ( P [ 11 ] [ 2 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 2 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 6 ] + P [ 1 ] [ 3 ] * SF [ 10 ] + P [ 3 ] [ 3 ] * SF [ 8 ] + P [ 12 ] [ 3 ] * SF [ 14 ] - P [ 10 ] [ 3 ] * SPP [ 10 ] - ( P [ 11 ] [ 3 ] * q0 ) / 2 ) + SPP [ 0 ] * ( P [ 2 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 6 ] + P [ 1 ] [ 0 ] * SF [ 10 ] + P [ 3 ] [ 0 ] * SF [ 8 ] + P [ 12 ] [ 0 ] * SF [ 14 ] - P [ 10 ] [ 0 ] * SPP [ 10 ] - ( P [ 11 ] [ 0 ] * q0 ) / 2 ) + SPP [ 4 ] * ( P [ 2 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 6 ] + P [ 1 ] [ 13 ] * SF [ 10 ] + P [ 3 ] [ 13 ] * SF [ 8 ] + P [ 12 ] [ 13 ] * SF [ 14 ] - P [ 10 ] [ 13 ] * SPP [ 10 ] - ( P [ 11 ] [ 13 ] * q0 ) / 2 ) - SPP [ 7 ] * ( P [ 2 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 6 ] + P [ 1 ] [ 14 ] * SF [ 10 ] + P [ 3 ] [ 14 ] * SF [ 8 ] + P [ 12 ] [ 14 ] * SF [ 14 ] - P [ 10 ] [ 14 ] * SPP [ 10 ] - ( P [ 11 ] [ 14 ] * q0 ) / 2 ) - SPP [ 1 ] * ( P [ 2 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 6 ] + P [ 1 ] [ 15 ] * SF [ 10 ] + P [ 3 ] [ 15 ] * SF [ 8 ] + P [ 12 ] [ 15 ] * SF [ 14 ] - P [ 10 ] [ 15 ] * SPP [ 10 ] - ( P [ 11 ] [ 15 ] * q0 ) / 2 ) ;
nextP [ 3 ] [ 6 ] = P [ 3 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 7 ] + P [ 1 ] [ 6 ] * SF [ 6 ] + P [ 2 ] [ 6 ] * SF [ 9 ] + P [ 10 ] [ 6 ] * SF [ 15 ] - P [ 11 ] [ 6 ] * SF [ 14 ] - ( P [ 12 ] [ 6 ] * q0 ) / 2 + SF [ 4 ] * ( P [ 3 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 7 ] + P [ 1 ] [ 1 ] * SF [ 6 ] + P [ 2 ] [ 1 ] * SF [ 9 ] + P [ 10 ] [ 1 ] * SF [ 15 ] - P [ 11 ] [ 1 ] * SF [ 14 ] - ( P [ 12 ] [ 1 ] * q0 ) / 2 ) - SF [ 5 ] * ( P [ 3 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 7 ] + P [ 1 ] [ 2 ] * SF [ 6 ] + P [ 2 ] [ 2 ] * SF [ 9 ] + P [ 10 ] [ 2 ] * SF [ 15 ] - P [ 11 ] [ 2 ] * SF [ 14 ] - ( P [ 12 ] [ 2 ] * q0 ) / 2 ) + SF [ 3 ] * ( P [ 3 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 7 ] + P [ 1 ] [ 3 ] * SF [ 6 ] + P [ 2 ] [ 3 ] * SF [ 9 ] + P [ 10 ] [ 3 ] * SF [ 15 ] - P [ 11 ] [ 3 ] * SF [ 14 ] - ( P [ 12 ] [ 3 ] * q0 ) / 2 ) + SPP [ 0 ] * ( P [ 3 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 7 ] + P [ 1 ] [ 0 ] * SF [ 6 ] + P [ 2 ] [ 0 ] * SF [ 9 ] + P [ 10 ] [ 0 ] * SF [ 15 ] - P [ 11 ] [ 0 ] * SF [ 14 ] - ( P [ 12 ] [ 0 ] * q0 ) / 2 ) + SPP [ 4 ] * ( P [ 3 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 7 ] + P [ 1 ] [ 13 ] * SF [ 6 ] + P [ 2 ] [ 13 ] * SF [ 9 ] + P [ 10 ] [ 13 ] * SF [ 15 ] - P [ 11 ] [ 13 ] * SF [ 14 ] - ( P [ 12 ] [ 13 ] * q0 ) / 2 ) - SPP [ 7 ] * ( P [ 3 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 7 ] + P [ 1 ] [ 14 ] * SF [ 6 ] + P [ 2 ] [ 14 ] * SF [ 9 ] + P [ 10 ] [ 14 ] * SF [ 15 ] - P [ 11 ] [ 14 ] * SF [ 14 ] - ( P [ 12 ] [ 14 ] * q0 ) / 2 ) - SPP [ 1 ] * ( P [ 3 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 7 ] + P [ 1 ] [ 15 ] * SF [ 6 ] + P [ 2 ] [ 15 ] * SF [ 9 ] + P [ 10 ] [ 15 ] * SF [ 15 ] - P [ 11 ] [ 15 ] * SF [ 14 ] - ( P [ 12 ] [ 15 ] * q0 ) / 2 ) ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 6 ] = P [ 4 ] [ 6 ] + SQ [ 1 ] + P [ 0 ] [ 6 ] * SF [ 5 ] + P [ 1 ] [ 6 ] * SF [ 3 ] - P [ 3 ] [ 6 ] * SF [ 4 ] + P [ 2 ] [ 6 ] * SPP [ 0 ] + P [ 13 ] [ 6 ] * SPP [ 3 ] + P [ 14 ] [ 6 ] * SPP [ 6 ] - P [ 15 ] [ 6 ] * SPP [ 9 ] + SF [ 4 ] * ( P [ 4 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 5 ] + P [ 1 ] [ 1 ] * SF [ 3 ] - P [ 3 ] [ 1 ] * SF [ 4 ] + P [ 2 ] [ 1 ] * SPP [ 0 ] + P [ 13 ] [ 1 ] * SPP [ 3 ] + P [ 14 ] [ 1 ] * SPP [ 6 ] - P [ 15 ] [ 1 ] * SPP [ 9 ] ) - SF [ 5 ] * ( P [ 4 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 5 ] + P [ 1 ] [ 2 ] * SF [ 3 ] - P [ 3 ] [ 2 ] * SF [ 4 ] + P [ 2 ] [ 2 ] * SPP [ 0 ] + P [ 13 ] [ 2 ] * SPP [ 3 ] + P [ 14 ] [ 2 ] * SPP [ 6 ] - P [ 15 ] [ 2 ] * SPP [ 9 ] ) + SF [ 3 ] * ( P [ 4 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 5 ] + P [ 1 ] [ 3 ] * SF [ 3 ] - P [ 3 ] [ 3 ] * SF [ 4 ] + P [ 2 ] [ 3 ] * SPP [ 0 ] + P [ 13 ] [ 3 ] * SPP [ 3 ] + P [ 14 ] [ 3 ] * SPP [ 6 ] - P [ 15 ] [ 3 ] * SPP [ 9 ] ) + SPP [ 0 ] * ( P [ 4 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 5 ] + P [ 1 ] [ 0 ] * SF [ 3 ] - P [ 3 ] [ 0 ] * SF [ 4 ] + P [ 2 ] [ 0 ] * SPP [ 0 ] + P [ 13 ] [ 0 ] * SPP [ 3 ] + P [ 14 ] [ 0 ] * SPP [ 6 ] - P [ 15 ] [ 0 ] * SPP [ 9 ] ) + SPP [ 4 ] * ( P [ 4 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 5 ] + P [ 1 ] [ 13 ] * SF [ 3 ] - P [ 3 ] [ 13 ] * SF [ 4 ] + P [ 2 ] [ 13 ] * SPP [ 0 ] + P [ 13 ] [ 13 ] * SPP [ 3 ] + P [ 14 ] [ 13 ] * SPP [ 6 ] - P [ 15 ] [ 13 ] * SPP [ 9 ] ) - SPP [ 7 ] * ( P [ 4 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 5 ] + P [ 1 ] [ 14 ] * SF [ 3 ] - P [ 3 ] [ 14 ] * SF [ 4 ] + P [ 2 ] [ 14 ] * SPP [ 0 ] + P [ 13 ] [ 14 ] * SPP [ 3 ] + P [ 14 ] [ 14 ] * SPP [ 6 ] - P [ 15 ] [ 14 ] * SPP [ 9 ] ) - SPP [ 1 ] * ( P [ 4 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 5 ] + P [ 1 ] [ 15 ] * SF [ 3 ] - P [ 3 ] [ 15 ] * SF [ 4 ] + P [ 2 ] [ 15 ] * SPP [ 0 ] + P [ 13 ] [ 15 ] * SPP [ 3 ] + P [ 14 ] [ 15 ] * SPP [ 6 ] - P [ 15 ] [ 15 ] * SPP [ 9 ] ) ;
nextP [ 5 ] [ 6 ] = P [ 5 ] [ 6 ] + SQ [ 0 ] + P [ 0 ] [ 6 ] * SF [ 4 ] + P [ 2 ] [ 6 ] * SF [ 3 ] + P [ 3 ] [ 6 ] * SF [ 5 ] - P [ 1 ] [ 6 ] * SPP [ 0 ] - P [ 13 ] [ 6 ] * SPP [ 8 ] + P [ 14 ] [ 6 ] * SPP [ 2 ] + P [ 15 ] [ 6 ] * SPP [ 5 ] + SF [ 4 ] * ( P [ 5 ] [ 1 ] + P [ 0 ] [ 1 ] * SF [ 4 ] + P [ 2 ] [ 1 ] * SF [ 3 ] + P [ 3 ] [ 1 ] * SF [ 5 ] - P [ 1 ] [ 1 ] * SPP [ 0 ] - P [ 13 ] [ 1 ] * SPP [ 8 ] + P [ 14 ] [ 1 ] * SPP [ 2 ] + P [ 15 ] [ 1 ] * SPP [ 5 ] ) - SF [ 5 ] * ( P [ 5 ] [ 2 ] + P [ 0 ] [ 2 ] * SF [ 4 ] + P [ 2 ] [ 2 ] * SF [ 3 ] + P [ 3 ] [ 2 ] * SF [ 5 ] - P [ 1 ] [ 2 ] * SPP [ 0 ] - P [ 13 ] [ 2 ] * SPP [ 8 ] + P [ 14 ] [ 2 ] * SPP [ 2 ] + P [ 15 ] [ 2 ] * SPP [ 5 ] ) + SF [ 3 ] * ( P [ 5 ] [ 3 ] + P [ 0 ] [ 3 ] * SF [ 4 ] + P [ 2 ] [ 3 ] * SF [ 3 ] + P [ 3 ] [ 3 ] * SF [ 5 ] - P [ 1 ] [ 3 ] * SPP [ 0 ] - P [ 13 ] [ 3 ] * SPP [ 8 ] + P [ 14 ] [ 3 ] * SPP [ 2 ] + P [ 15 ] [ 3 ] * SPP [ 5 ] ) + SPP [ 0 ] * ( P [ 5 ] [ 0 ] + P [ 0 ] [ 0 ] * SF [ 4 ] + P [ 2 ] [ 0 ] * SF [ 3 ] + P [ 3 ] [ 0 ] * SF [ 5 ] - P [ 1 ] [ 0 ] * SPP [ 0 ] - P [ 13 ] [ 0 ] * SPP [ 8 ] + P [ 14 ] [ 0 ] * SPP [ 2 ] + P [ 15 ] [ 0 ] * SPP [ 5 ] ) + SPP [ 4 ] * ( P [ 5 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 4 ] + P [ 2 ] [ 13 ] * SF [ 3 ] + P [ 3 ] [ 13 ] * SF [ 5 ] - P [ 1 ] [ 13 ] * SPP [ 0 ] - P [ 13 ] [ 13 ] * SPP [ 8 ] + P [ 14 ] [ 13 ] * SPP [ 2 ] + P [ 15 ] [ 13 ] * SPP [ 5 ] ) - SPP [ 7 ] * ( P [ 5 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 4 ] + P [ 2 ] [ 14 ] * SF [ 3 ] + P [ 3 ] [ 14 ] * SF [ 5 ] - P [ 1 ] [ 14 ] * SPP [ 0 ] - P [ 13 ] [ 14 ] * SPP [ 8 ] + P [ 14 ] [ 14 ] * SPP [ 2 ] + P [ 15 ] [ 14 ] * SPP [ 5 ] ) - SPP [ 1 ] * ( P [ 5 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 4 ] + P [ 2 ] [ 15 ] * SF [ 3 ] + P [ 3 ] [ 15 ] * SF [ 5 ] - P [ 1 ] [ 15 ] * SPP [ 0 ] - P [ 13 ] [ 15 ] * SPP [ 8 ] + P [ 14 ] [ 15 ] * SPP [ 2 ] + P [ 15 ] [ 15 ] * SPP [ 5 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 6 ] [ 6 ] = P [ 6 ] [ 6 ] + P [ 1 ] [ 6 ] * SF [ 4 ] - P [ 2 ] [ 6 ] * SF [ 5 ] + P [ 3 ] [ 6 ] * SF [ 3 ] + P [ 0 ] [ 6 ] * SPP [ 0 ] + P [ 13 ] [ 6 ] * SPP [ 4 ] - P [ 14 ] [ 6 ] * SPP [ 7 ] - P [ 15 ] [ 6 ] * SPP [ 1 ] + dvxVar * sq ( SG [ 6 ] - 2 * q0 * q2 ) + dvyVar * sq ( SG [ 5 ] + 2 * q0 * q1 ) + SF [ 4 ] * ( P [ 6 ] [ 1 ] + P [ 1 ] [ 1 ] * SF [ 4 ] - P [ 2 ] [ 1 ] * SF [ 5 ] + P [ 3 ] [ 1 ] * SF [ 3 ] + P [ 0 ] [ 1 ] * SPP [ 0 ] + P [ 13 ] [ 1 ] * SPP [ 4 ] - P [ 14 ] [ 1 ] * SPP [ 7 ] - P [ 15 ] [ 1 ] * SPP [ 1 ] ) - SF [ 5 ] * ( P [ 6 ] [ 2 ] + P [ 1 ] [ 2 ] * SF [ 4 ] - P [ 2 ] [ 2 ] * SF [ 5 ] + P [ 3 ] [ 2 ] * SF [ 3 ] + P [ 0 ] [ 2 ] * SPP [ 0 ] + P [ 13 ] [ 2 ] * SPP [ 4 ] - P [ 14 ] [ 2 ] * SPP [ 7 ] - P [ 15 ] [ 2 ] * SPP [ 1 ] ) + SF [ 3 ] * ( P [ 6 ] [ 3 ] + P [ 1 ] [ 3 ] * SF [ 4 ] - P [ 2 ] [ 3 ] * SF [ 5 ] + P [ 3 ] [ 3 ] * SF [ 3 ] + P [ 0 ] [ 3 ] * SPP [ 0 ] + P [ 13 ] [ 3 ] * SPP [ 4 ] - P [ 14 ] [ 3 ] * SPP [ 7 ] - P [ 15 ] [ 3 ] * SPP [ 1 ] ) + SPP [ 0 ] * ( P [ 6 ] [ 0 ] + P [ 1 ] [ 0 ] * SF [ 4 ] - P [ 2 ] [ 0 ] * SF [ 5 ] + P [ 3 ] [ 0 ] * SF [ 3 ] + P [ 0 ] [ 0 ] * SPP [ 0 ] + P [ 13 ] [ 0 ] * SPP [ 4 ] - P [ 14 ] [ 0 ] * SPP [ 7 ] - P [ 15 ] [ 0 ] * SPP [ 1 ] ) + SPP [ 4 ] * ( P [ 6 ] [ 13 ] + P [ 1 ] [ 13 ] * SF [ 4 ] - P [ 2 ] [ 13 ] * SF [ 5 ] + P [ 3 ] [ 13 ] * SF [ 3 ] + P [ 0 ] [ 13 ] * SPP [ 0 ] + P [ 13 ] [ 13 ] * SPP [ 4 ] - P [ 14 ] [ 13 ] * SPP [ 7 ] - P [ 15 ] [ 13 ] * SPP [ 1 ] ) - SPP [ 7 ] * ( P [ 6 ] [ 14 ] + P [ 1 ] [ 14 ] * SF [ 4 ] - P [ 2 ] [ 14 ] * SF [ 5 ] + P [ 3 ] [ 14 ] * SF [ 3 ] + P [ 0 ] [ 14 ] * SPP [ 0 ] + P [ 13 ] [ 14 ] * SPP [ 4 ] - P [ 14 ] [ 14 ] * SPP [ 7 ] - P [ 15 ] [ 14 ] * SPP [ 1 ] ) - SPP [ 1 ] * ( P [ 6 ] [ 15 ] + P [ 1 ] [ 15 ] * SF [ 4 ] - P [ 2 ] [ 15 ] * SF [ 5 ] + P [ 3 ] [ 15 ] * SF [ 3 ] + P [ 0 ] [ 15 ] * SPP [ 0 ] + P [ 13 ] [ 15 ] * SPP [ 4 ] - P [ 14 ] [ 15 ] * SPP [ 7 ] - P [ 15 ] [ 15 ] * SPP [ 1 ] ) + dvzVar * sq ( SG [ 1 ] - SG [ 2 ] - SG [ 3 ] + SG [ 4 ] ) ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 7 ] = P [ 0 ] [ 7 ] + P [ 1 ] [ 7 ] * SF [ 9 ] + P [ 2 ] [ 7 ] * SF [ 11 ] + P [ 3 ] [ 7 ] * SF [ 10 ] + P [ 10 ] [ 7 ] * SF [ 14 ] + P [ 11 ] [ 7 ] * SF [ 15 ] + P [ 12 ] [ 7 ] * SPP [ 10 ] + dt * ( P [ 0 ] [ 4 ] + P [ 1 ] [ 4 ] * SF [ 9 ] + P [ 2 ] [ 4 ] * SF [ 11 ] + P [ 3 ] [ 4 ] * SF [ 10 ] + P [ 10 ] [ 4 ] * SF [ 14 ] + P [ 11 ] [ 4 ] * SF [ 15 ] + P [ 12 ] [ 4 ] * SPP [ 10 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 7 ] = P [ 1 ] [ 7 ] + P [ 0 ] [ 7 ] * SF [ 8 ] + P [ 2 ] [ 7 ] * SF [ 7 ] + P [ 3 ] [ 7 ] * SF [ 11 ] - P [ 12 ] [ 7 ] * SF [ 15 ] + P [ 11 ] [ 7 ] * SPP [ 10 ] - ( P [ 10 ] [ 7 ] * q0 ) / 2 + dt * ( P [ 1 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 8 ] + P [ 2 ] [ 4 ] * SF [ 7 ] + P [ 3 ] [ 4 ] * SF [ 11 ] - P [ 12 ] [ 4 ] * SF [ 15 ] + P [ 11 ] [ 4 ] * SPP [ 10 ] - ( P [ 10 ] [ 4 ] * q0 ) / 2 ) ;
nextP [ 2 ] [ 7 ] = P [ 2 ] [ 7 ] + P [ 0 ] [ 7 ] * SF [ 6 ] + P [ 1 ] [ 7 ] * SF [ 10 ] + P [ 3 ] [ 7 ] * SF [ 8 ] + P [ 12 ] [ 7 ] * SF [ 14 ] - P [ 10 ] [ 7 ] * SPP [ 10 ] - ( P [ 11 ] [ 7 ] * q0 ) / 2 + dt * ( P [ 2 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 6 ] + P [ 1 ] [ 4 ] * SF [ 10 ] + P [ 3 ] [ 4 ] * SF [ 8 ] + P [ 12 ] [ 4 ] * SF [ 14 ] - P [ 10 ] [ 4 ] * SPP [ 10 ] - ( P [ 11 ] [ 4 ] * q0 ) / 2 ) ;
nextP [ 3 ] [ 7 ] = P [ 3 ] [ 7 ] + P [ 0 ] [ 7 ] * SF [ 7 ] + P [ 1 ] [ 7 ] * SF [ 6 ] + P [ 2 ] [ 7 ] * SF [ 9 ] + P [ 10 ] [ 7 ] * SF [ 15 ] - P [ 11 ] [ 7 ] * SF [ 14 ] - ( P [ 12 ] [ 7 ] * q0 ) / 2 + dt * ( P [ 3 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 7 ] + P [ 1 ] [ 4 ] * SF [ 6 ] + P [ 2 ] [ 4 ] * SF [ 9 ] + P [ 10 ] [ 4 ] * SF [ 15 ] - P [ 11 ] [ 4 ] * SF [ 14 ] - ( P [ 12 ] [ 4 ] * q0 ) / 2 ) ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 7 ] = P [ 4 ] [ 7 ] + P [ 0 ] [ 7 ] * SF [ 5 ] + P [ 1 ] [ 7 ] * SF [ 3 ] - P [ 3 ] [ 7 ] * SF [ 4 ] + P [ 2 ] [ 7 ] * SPP [ 0 ] + P [ 13 ] [ 7 ] * SPP [ 3 ] + P [ 14 ] [ 7 ] * SPP [ 6 ] - P [ 15 ] [ 7 ] * SPP [ 9 ] + dt * ( P [ 4 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 5 ] + P [ 1 ] [ 4 ] * SF [ 3 ] - P [ 3 ] [ 4 ] * SF [ 4 ] + P [ 2 ] [ 4 ] * SPP [ 0 ] + P [ 13 ] [ 4 ] * SPP [ 3 ] + P [ 14 ] [ 4 ] * SPP [ 6 ] - P [ 15 ] [ 4 ] * SPP [ 9 ] ) ;
nextP [ 5 ] [ 7 ] = P [ 5 ] [ 7 ] + P [ 0 ] [ 7 ] * SF [ 4 ] + P [ 2 ] [ 7 ] * SF [ 3 ] + P [ 3 ] [ 7 ] * SF [ 5 ] - P [ 1 ] [ 7 ] * SPP [ 0 ] - P [ 13 ] [ 7 ] * SPP [ 8 ] + P [ 14 ] [ 7 ] * SPP [ 2 ] + P [ 15 ] [ 7 ] * SPP [ 5 ] + dt * ( P [ 5 ] [ 4 ] + P [ 0 ] [ 4 ] * SF [ 4 ] + P [ 2 ] [ 4 ] * SF [ 3 ] + P [ 3 ] [ 4 ] * SF [ 5 ] - P [ 1 ] [ 4 ] * SPP [ 0 ] - P [ 13 ] [ 4 ] * SPP [ 8 ] + P [ 14 ] [ 4 ] * SPP [ 2 ] + P [ 15 ] [ 4 ] * SPP [ 5 ] ) ;
nextP [ 6 ] [ 7 ] = P [ 6 ] [ 7 ] + P [ 1 ] [ 7 ] * SF [ 4 ] - P [ 2 ] [ 7 ] * SF [ 5 ] + P [ 3 ] [ 7 ] * SF [ 3 ] + P [ 0 ] [ 7 ] * SPP [ 0 ] + P [ 13 ] [ 7 ] * SPP [ 4 ] - P [ 14 ] [ 7 ] * SPP [ 7 ] - P [ 15 ] [ 7 ] * SPP [ 1 ] + dt * ( P [ 6 ] [ 4 ] + P [ 1 ] [ 4 ] * SF [ 4 ] - P [ 2 ] [ 4 ] * SF [ 5 ] + P [ 3 ] [ 4 ] * SF [ 3 ] + P [ 0 ] [ 4 ] * SPP [ 0 ] + P [ 13 ] [ 4 ] * SPP [ 4 ] - P [ 14 ] [ 4 ] * SPP [ 7 ] - P [ 15 ] [ 4 ] * SPP [ 1 ] ) ;
nextP [ 7 ] [ 7 ] = P [ 7 ] [ 7 ] + P [ 4 ] [ 7 ] * dt + dt * ( P [ 7 ] [ 4 ] + P [ 4 ] [ 4 ] * dt ) ;
nextP [ 0 ] [ 8 ] = P [ 0 ] [ 8 ] + P [ 1 ] [ 8 ] * SF [ 9 ] + P [ 2 ] [ 8 ] * SF [ 11 ] + P [ 3 ] [ 8 ] * SF [ 10 ] + P [ 10 ] [ 8 ] * SF [ 14 ] + P [ 11 ] [ 8 ] * SF [ 15 ] + P [ 12 ] [ 8 ] * SPP [ 10 ] + dt * ( P [ 0 ] [ 5 ] + P [ 1 ] [ 5 ] * SF [ 9 ] + P [ 2 ] [ 5 ] * SF [ 11 ] + P [ 3 ] [ 5 ] * SF [ 10 ] + P [ 10 ] [ 5 ] * SF [ 14 ] + P [ 11 ] [ 5 ] * SF [ 15 ] + P [ 12 ] [ 5 ] * SPP [ 10 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 8 ] = P [ 1 ] [ 8 ] + P [ 0 ] [ 8 ] * SF [ 8 ] + P [ 2 ] [ 8 ] * SF [ 7 ] + P [ 3 ] [ 8 ] * SF [ 11 ] - P [ 12 ] [ 8 ] * SF [ 15 ] + P [ 11 ] [ 8 ] * SPP [ 10 ] - ( P [ 10 ] [ 8 ] * q0 ) / 2 + dt * ( P [ 1 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 8 ] + P [ 2 ] [ 5 ] * SF [ 7 ] + P [ 3 ] [ 5 ] * SF [ 11 ] - P [ 12 ] [ 5 ] * SF [ 15 ] + P [ 11 ] [ 5 ] * SPP [ 10 ] - ( P [ 10 ] [ 5 ] * q0 ) / 2 ) ;
nextP [ 2 ] [ 8 ] = P [ 2 ] [ 8 ] + P [ 0 ] [ 8 ] * SF [ 6 ] + P [ 1 ] [ 8 ] * SF [ 10 ] + P [ 3 ] [ 8 ] * SF [ 8 ] + P [ 12 ] [ 8 ] * SF [ 14 ] - P [ 10 ] [ 8 ] * SPP [ 10 ] - ( P [ 11 ] [ 8 ] * q0 ) / 2 + dt * ( P [ 2 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 6 ] + P [ 1 ] [ 5 ] * SF [ 10 ] + P [ 3 ] [ 5 ] * SF [ 8 ] + P [ 12 ] [ 5 ] * SF [ 14 ] - P [ 10 ] [ 5 ] * SPP [ 10 ] - ( P [ 11 ] [ 5 ] * q0 ) / 2 ) ;
nextP [ 3 ] [ 8 ] = P [ 3 ] [ 8 ] + P [ 0 ] [ 8 ] * SF [ 7 ] + P [ 1 ] [ 8 ] * SF [ 6 ] + P [ 2 ] [ 8 ] * SF [ 9 ] + P [ 10 ] [ 8 ] * SF [ 15 ] - P [ 11 ] [ 8 ] * SF [ 14 ] - ( P [ 12 ] [ 8 ] * q0 ) / 2 + dt * ( P [ 3 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 7 ] + P [ 1 ] [ 5 ] * SF [ 6 ] + P [ 2 ] [ 5 ] * SF [ 9 ] + P [ 10 ] [ 5 ] * SF [ 15 ] - P [ 11 ] [ 5 ] * SF [ 14 ] - ( P [ 12 ] [ 5 ] * q0 ) / 2 ) ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 8 ] = P [ 4 ] [ 8 ] + P [ 0 ] [ 8 ] * SF [ 5 ] + P [ 1 ] [ 8 ] * SF [ 3 ] - P [ 3 ] [ 8 ] * SF [ 4 ] + P [ 2 ] [ 8 ] * SPP [ 0 ] + P [ 13 ] [ 8 ] * SPP [ 3 ] + P [ 14 ] [ 8 ] * SPP [ 6 ] - P [ 15 ] [ 8 ] * SPP [ 9 ] + dt * ( P [ 4 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 5 ] + P [ 1 ] [ 5 ] * SF [ 3 ] - P [ 3 ] [ 5 ] * SF [ 4 ] + P [ 2 ] [ 5 ] * SPP [ 0 ] + P [ 13 ] [ 5 ] * SPP [ 3 ] + P [ 14 ] [ 5 ] * SPP [ 6 ] - P [ 15 ] [ 5 ] * SPP [ 9 ] ) ;
nextP [ 5 ] [ 8 ] = P [ 5 ] [ 8 ] + P [ 0 ] [ 8 ] * SF [ 4 ] + P [ 2 ] [ 8 ] * SF [ 3 ] + P [ 3 ] [ 8 ] * SF [ 5 ] - P [ 1 ] [ 8 ] * SPP [ 0 ] - P [ 13 ] [ 8 ] * SPP [ 8 ] + P [ 14 ] [ 8 ] * SPP [ 2 ] + P [ 15 ] [ 8 ] * SPP [ 5 ] + dt * ( P [ 5 ] [ 5 ] + P [ 0 ] [ 5 ] * SF [ 4 ] + P [ 2 ] [ 5 ] * SF [ 3 ] + P [ 3 ] [ 5 ] * SF [ 5 ] - P [ 1 ] [ 5 ] * SPP [ 0 ] - P [ 13 ] [ 5 ] * SPP [ 8 ] + P [ 14 ] [ 5 ] * SPP [ 2 ] + P [ 15 ] [ 5 ] * SPP [ 5 ] ) ;
nextP [ 6 ] [ 8 ] = P [ 6 ] [ 8 ] + P [ 1 ] [ 8 ] * SF [ 4 ] - P [ 2 ] [ 8 ] * SF [ 5 ] + P [ 3 ] [ 8 ] * SF [ 3 ] + P [ 0 ] [ 8 ] * SPP [ 0 ] + P [ 13 ] [ 8 ] * SPP [ 4 ] - P [ 14 ] [ 8 ] * SPP [ 7 ] - P [ 15 ] [ 8 ] * SPP [ 1 ] + dt * ( P [ 6 ] [ 5 ] + P [ 1 ] [ 5 ] * SF [ 4 ] - P [ 2 ] [ 5 ] * SF [ 5 ] + P [ 3 ] [ 5 ] * SF [ 3 ] + P [ 0 ] [ 5 ] * SPP [ 0 ] + P [ 13 ] [ 5 ] * SPP [ 4 ] - P [ 14 ] [ 5 ] * SPP [ 7 ] - P [ 15 ] [ 5 ] * SPP [ 1 ] ) ;
nextP [ 7 ] [ 8 ] = P [ 7 ] [ 8 ] + P [ 4 ] [ 8 ] * dt + dt * ( P [ 7 ] [ 5 ] + P [ 4 ] [ 5 ] * dt ) ;
nextP [ 8 ] [ 8 ] = P [ 8 ] [ 8 ] + P [ 5 ] [ 8 ] * dt + dt * ( P [ 8 ] [ 5 ] + P [ 5 ] [ 5 ] * dt ) ;
nextP [ 0 ] [ 9 ] = P [ 0 ] [ 9 ] + P [ 1 ] [ 9 ] * SF [ 9 ] + P [ 2 ] [ 9 ] * SF [ 11 ] + P [ 3 ] [ 9 ] * SF [ 10 ] + P [ 10 ] [ 9 ] * SF [ 14 ] + P [ 11 ] [ 9 ] * SF [ 15 ] + P [ 12 ] [ 9 ] * SPP [ 10 ] + dt * ( P [ 0 ] [ 6 ] + P [ 1 ] [ 6 ] * SF [ 9 ] + P [ 2 ] [ 6 ] * SF [ 11 ] + P [ 3 ] [ 6 ] * SF [ 10 ] + P [ 10 ] [ 6 ] * SF [ 14 ] + P [ 11 ] [ 6 ] * SF [ 15 ] + P [ 12 ] [ 6 ] * SPP [ 10 ] ) ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 9 ] = P [ 1 ] [ 9 ] + P [ 0 ] [ 9 ] * SF [ 8 ] + P [ 2 ] [ 9 ] * SF [ 7 ] + P [ 3 ] [ 9 ] * SF [ 11 ] - P [ 12 ] [ 9 ] * SF [ 15 ] + P [ 11 ] [ 9 ] * SPP [ 10 ] - ( P [ 10 ] [ 9 ] * q0 ) / 2 + dt * ( P [ 1 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 8 ] + P [ 2 ] [ 6 ] * SF [ 7 ] + P [ 3 ] [ 6 ] * SF [ 11 ] - P [ 12 ] [ 6 ] * SF [ 15 ] + P [ 11 ] [ 6 ] * SPP [ 10 ] - ( P [ 10 ] [ 6 ] * q0 ) / 2 ) ;
nextP [ 2 ] [ 9 ] = P [ 2 ] [ 9 ] + P [ 0 ] [ 9 ] * SF [ 6 ] + P [ 1 ] [ 9 ] * SF [ 10 ] + P [ 3 ] [ 9 ] * SF [ 8 ] + P [ 12 ] [ 9 ] * SF [ 14 ] - P [ 10 ] [ 9 ] * SPP [ 10 ] - ( P [ 11 ] [ 9 ] * q0 ) / 2 + dt * ( P [ 2 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 6 ] + P [ 1 ] [ 6 ] * SF [ 10 ] + P [ 3 ] [ 6 ] * SF [ 8 ] + P [ 12 ] [ 6 ] * SF [ 14 ] - P [ 10 ] [ 6 ] * SPP [ 10 ] - ( P [ 11 ] [ 6 ] * q0 ) / 2 ) ;
nextP [ 3 ] [ 9 ] = P [ 3 ] [ 9 ] + P [ 0 ] [ 9 ] * SF [ 7 ] + P [ 1 ] [ 9 ] * SF [ 6 ] + P [ 2 ] [ 9 ] * SF [ 9 ] + P [ 10 ] [ 9 ] * SF [ 15 ] - P [ 11 ] [ 9 ] * SF [ 14 ] - ( P [ 12 ] [ 9 ] * q0 ) / 2 + dt * ( P [ 3 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 7 ] + P [ 1 ] [ 6 ] * SF [ 6 ] + P [ 2 ] [ 6 ] * SF [ 9 ] + P [ 10 ] [ 6 ] * SF [ 15 ] - P [ 11 ] [ 6 ] * SF [ 14 ] - ( P [ 12 ] [ 6 ] * q0 ) / 2 ) ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 9 ] = P [ 4 ] [ 9 ] + P [ 0 ] [ 9 ] * SF [ 5 ] + P [ 1 ] [ 9 ] * SF [ 3 ] - P [ 3 ] [ 9 ] * SF [ 4 ] + P [ 2 ] [ 9 ] * SPP [ 0 ] + P [ 13 ] [ 9 ] * SPP [ 3 ] + P [ 14 ] [ 9 ] * SPP [ 6 ] - P [ 15 ] [ 9 ] * SPP [ 9 ] + dt * ( P [ 4 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 5 ] + P [ 1 ] [ 6 ] * SF [ 3 ] - P [ 3 ] [ 6 ] * SF [ 4 ] + P [ 2 ] [ 6 ] * SPP [ 0 ] + P [ 13 ] [ 6 ] * SPP [ 3 ] + P [ 14 ] [ 6 ] * SPP [ 6 ] - P [ 15 ] [ 6 ] * SPP [ 9 ] ) ;
nextP [ 5 ] [ 9 ] = P [ 5 ] [ 9 ] + P [ 0 ] [ 9 ] * SF [ 4 ] + P [ 2 ] [ 9 ] * SF [ 3 ] + P [ 3 ] [ 9 ] * SF [ 5 ] - P [ 1 ] [ 9 ] * SPP [ 0 ] - P [ 13 ] [ 9 ] * SPP [ 8 ] + P [ 14 ] [ 9 ] * SPP [ 2 ] + P [ 15 ] [ 9 ] * SPP [ 5 ] + dt * ( P [ 5 ] [ 6 ] + P [ 0 ] [ 6 ] * SF [ 4 ] + P [ 2 ] [ 6 ] * SF [ 3 ] + P [ 3 ] [ 6 ] * SF [ 5 ] - P [ 1 ] [ 6 ] * SPP [ 0 ] - P [ 13 ] [ 6 ] * SPP [ 8 ] + P [ 14 ] [ 6 ] * SPP [ 2 ] + P [ 15 ] [ 6 ] * SPP [ 5 ] ) ;
nextP [ 6 ] [ 9 ] = P [ 6 ] [ 9 ] + P [ 1 ] [ 9 ] * SF [ 4 ] - P [ 2 ] [ 9 ] * SF [ 5 ] + P [ 3 ] [ 9 ] * SF [ 3 ] + P [ 0 ] [ 9 ] * SPP [ 0 ] + P [ 13 ] [ 9 ] * SPP [ 4 ] - P [ 14 ] [ 9 ] * SPP [ 7 ] - P [ 15 ] [ 9 ] * SPP [ 1 ] + dt * ( P [ 6 ] [ 6 ] + P [ 1 ] [ 6 ] * SF [ 4 ] - P [ 2 ] [ 6 ] * SF [ 5 ] + P [ 3 ] [ 6 ] * SF [ 3 ] + P [ 0 ] [ 6 ] * SPP [ 0 ] + P [ 13 ] [ 6 ] * SPP [ 4 ] - P [ 14 ] [ 6 ] * SPP [ 7 ] - P [ 15 ] [ 6 ] * SPP [ 1 ] ) ;
nextP [ 7 ] [ 9 ] = P [ 7 ] [ 9 ] + P [ 4 ] [ 9 ] * dt + dt * ( P [ 7 ] [ 6 ] + P [ 4 ] [ 6 ] * dt ) ;
nextP [ 8 ] [ 9 ] = P [ 8 ] [ 9 ] + P [ 5 ] [ 9 ] * dt + dt * ( P [ 8 ] [ 6 ] + P [ 5 ] [ 6 ] * dt ) ;
nextP [ 9 ] [ 9 ] = P [ 9 ] [ 9 ] + P [ 6 ] [ 9 ] * dt + dt * ( P [ 9 ] [ 6 ] + P [ 6 ] [ 6 ] * dt ) ;
nextP [ 0 ] [ 10 ] = P [ 0 ] [ 10 ] + P [ 1 ] [ 10 ] * SF [ 9 ] + P [ 2 ] [ 10 ] * SF [ 11 ] + P [ 3 ] [ 10 ] * SF [ 10 ] + P [ 10 ] [ 10 ] * SF [ 14 ] + P [ 11 ] [ 10 ] * SF [ 15 ] + P [ 12 ] [ 10 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 10 ] = P [ 1 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 8 ] + P [ 2 ] [ 10 ] * SF [ 7 ] + P [ 3 ] [ 10 ] * SF [ 11 ] - P [ 12 ] [ 10 ] * SF [ 15 ] + P [ 11 ] [ 10 ] * SPP [ 10 ] - ( P [ 10 ] [ 10 ] * q0 ) / 2 ;
nextP [ 2 ] [ 10 ] = P [ 2 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 6 ] + P [ 1 ] [ 10 ] * SF [ 10 ] + P [ 3 ] [ 10 ] * SF [ 8 ] + P [ 12 ] [ 10 ] * SF [ 14 ] - P [ 10 ] [ 10 ] * SPP [ 10 ] - ( P [ 11 ] [ 10 ] * q0 ) / 2 ;
nextP [ 3 ] [ 10 ] = P [ 3 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 7 ] + P [ 1 ] [ 10 ] * SF [ 6 ] + P [ 2 ] [ 10 ] * SF [ 9 ] + P [ 10 ] [ 10 ] * SF [ 15 ] - P [ 11 ] [ 10 ] * SF [ 14 ] - ( P [ 12 ] [ 10 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 10 ] = P [ 4 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 5 ] + P [ 1 ] [ 10 ] * SF [ 3 ] - P [ 3 ] [ 10 ] * SF [ 4 ] + P [ 2 ] [ 10 ] * SPP [ 0 ] + P [ 13 ] [ 10 ] * SPP [ 3 ] + P [ 14 ] [ 10 ] * SPP [ 6 ] - P [ 15 ] [ 10 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 10 ] = P [ 5 ] [ 10 ] + P [ 0 ] [ 10 ] * SF [ 4 ] + P [ 2 ] [ 10 ] * SF [ 3 ] + P [ 3 ] [ 10 ] * SF [ 5 ] - P [ 1 ] [ 10 ] * SPP [ 0 ] - P [ 13 ] [ 10 ] * SPP [ 8 ] + P [ 14 ] [ 10 ] * SPP [ 2 ] + P [ 15 ] [ 10 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 10 ] = P [ 6 ] [ 10 ] + P [ 1 ] [ 10 ] * SF [ 4 ] - P [ 2 ] [ 10 ] * SF [ 5 ] + P [ 3 ] [ 10 ] * SF [ 3 ] + P [ 0 ] [ 10 ] * SPP [ 0 ] + P [ 13 ] [ 10 ] * SPP [ 4 ] - P [ 14 ] [ 10 ] * SPP [ 7 ] - P [ 15 ] [ 10 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 10 ] = P [ 7 ] [ 10 ] + P [ 4 ] [ 10 ] * dt ;
nextP [ 8 ] [ 10 ] = P [ 8 ] [ 10 ] + P [ 5 ] [ 10 ] * dt ;
nextP [ 9 ] [ 10 ] = P [ 9 ] [ 10 ] + P [ 6 ] [ 10 ] * dt ;
2015-12-06 07:18:05 -04:00
nextP [ 10 ] [ 10 ] = P [ 10 ] [ 10 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 11 ] = P [ 0 ] [ 11 ] + P [ 1 ] [ 11 ] * SF [ 9 ] + P [ 2 ] [ 11 ] * SF [ 11 ] + P [ 3 ] [ 11 ] * SF [ 10 ] + P [ 10 ] [ 11 ] * SF [ 14 ] + P [ 11 ] [ 11 ] * SF [ 15 ] + P [ 12 ] [ 11 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 11 ] = P [ 1 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 8 ] + P [ 2 ] [ 11 ] * SF [ 7 ] + P [ 3 ] [ 11 ] * SF [ 11 ] - P [ 12 ] [ 11 ] * SF [ 15 ] + P [ 11 ] [ 11 ] * SPP [ 10 ] - ( P [ 10 ] [ 11 ] * q0 ) / 2 ;
nextP [ 2 ] [ 11 ] = P [ 2 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 6 ] + P [ 1 ] [ 11 ] * SF [ 10 ] + P [ 3 ] [ 11 ] * SF [ 8 ] + P [ 12 ] [ 11 ] * SF [ 14 ] - P [ 10 ] [ 11 ] * SPP [ 10 ] - ( P [ 11 ] [ 11 ] * q0 ) / 2 ;
nextP [ 3 ] [ 11 ] = P [ 3 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 7 ] + P [ 1 ] [ 11 ] * SF [ 6 ] + P [ 2 ] [ 11 ] * SF [ 9 ] + P [ 10 ] [ 11 ] * SF [ 15 ] - P [ 11 ] [ 11 ] * SF [ 14 ] - ( P [ 12 ] [ 11 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 11 ] = P [ 4 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 5 ] + P [ 1 ] [ 11 ] * SF [ 3 ] - P [ 3 ] [ 11 ] * SF [ 4 ] + P [ 2 ] [ 11 ] * SPP [ 0 ] + P [ 13 ] [ 11 ] * SPP [ 3 ] + P [ 14 ] [ 11 ] * SPP [ 6 ] - P [ 15 ] [ 11 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 11 ] = P [ 5 ] [ 11 ] + P [ 0 ] [ 11 ] * SF [ 4 ] + P [ 2 ] [ 11 ] * SF [ 3 ] + P [ 3 ] [ 11 ] * SF [ 5 ] - P [ 1 ] [ 11 ] * SPP [ 0 ] - P [ 13 ] [ 11 ] * SPP [ 8 ] + P [ 14 ] [ 11 ] * SPP [ 2 ] + P [ 15 ] [ 11 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 11 ] = P [ 6 ] [ 11 ] + P [ 1 ] [ 11 ] * SF [ 4 ] - P [ 2 ] [ 11 ] * SF [ 5 ] + P [ 3 ] [ 11 ] * SF [ 3 ] + P [ 0 ] [ 11 ] * SPP [ 0 ] + P [ 13 ] [ 11 ] * SPP [ 4 ] - P [ 14 ] [ 11 ] * SPP [ 7 ] - P [ 15 ] [ 11 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 11 ] = P [ 7 ] [ 11 ] + P [ 4 ] [ 11 ] * dt ;
nextP [ 8 ] [ 11 ] = P [ 8 ] [ 11 ] + P [ 5 ] [ 11 ] * dt ;
nextP [ 9 ] [ 11 ] = P [ 9 ] [ 11 ] + P [ 6 ] [ 11 ] * dt ;
2015-12-06 07:18:05 -04:00
nextP [ 10 ] [ 11 ] = P [ 10 ] [ 11 ] ;
nextP [ 11 ] [ 11 ] = P [ 11 ] [ 11 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 12 ] = P [ 0 ] [ 12 ] + P [ 1 ] [ 12 ] * SF [ 9 ] + P [ 2 ] [ 12 ] * SF [ 11 ] + P [ 3 ] [ 12 ] * SF [ 10 ] + P [ 10 ] [ 12 ] * SF [ 14 ] + P [ 11 ] [ 12 ] * SF [ 15 ] + P [ 12 ] [ 12 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 12 ] = P [ 1 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 8 ] + P [ 2 ] [ 12 ] * SF [ 7 ] + P [ 3 ] [ 12 ] * SF [ 11 ] - P [ 12 ] [ 12 ] * SF [ 15 ] + P [ 11 ] [ 12 ] * SPP [ 10 ] - ( P [ 10 ] [ 12 ] * q0 ) / 2 ;
nextP [ 2 ] [ 12 ] = P [ 2 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 6 ] + P [ 1 ] [ 12 ] * SF [ 10 ] + P [ 3 ] [ 12 ] * SF [ 8 ] + P [ 12 ] [ 12 ] * SF [ 14 ] - P [ 10 ] [ 12 ] * SPP [ 10 ] - ( P [ 11 ] [ 12 ] * q0 ) / 2 ;
nextP [ 3 ] [ 12 ] = P [ 3 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 7 ] + P [ 1 ] [ 12 ] * SF [ 6 ] + P [ 2 ] [ 12 ] * SF [ 9 ] + P [ 10 ] [ 12 ] * SF [ 15 ] - P [ 11 ] [ 12 ] * SF [ 14 ] - ( P [ 12 ] [ 12 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 12 ] = P [ 4 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 5 ] + P [ 1 ] [ 12 ] * SF [ 3 ] - P [ 3 ] [ 12 ] * SF [ 4 ] + P [ 2 ] [ 12 ] * SPP [ 0 ] + P [ 13 ] [ 12 ] * SPP [ 3 ] + P [ 14 ] [ 12 ] * SPP [ 6 ] - P [ 15 ] [ 12 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 12 ] = P [ 5 ] [ 12 ] + P [ 0 ] [ 12 ] * SF [ 4 ] + P [ 2 ] [ 12 ] * SF [ 3 ] + P [ 3 ] [ 12 ] * SF [ 5 ] - P [ 1 ] [ 12 ] * SPP [ 0 ] - P [ 13 ] [ 12 ] * SPP [ 8 ] + P [ 14 ] [ 12 ] * SPP [ 2 ] + P [ 15 ] [ 12 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 12 ] = P [ 6 ] [ 12 ] + P [ 1 ] [ 12 ] * SF [ 4 ] - P [ 2 ] [ 12 ] * SF [ 5 ] + P [ 3 ] [ 12 ] * SF [ 3 ] + P [ 0 ] [ 12 ] * SPP [ 0 ] + P [ 13 ] [ 12 ] * SPP [ 4 ] - P [ 14 ] [ 12 ] * SPP [ 7 ] - P [ 15 ] [ 12 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 12 ] = P [ 7 ] [ 12 ] + P [ 4 ] [ 12 ] * dt ;
nextP [ 8 ] [ 12 ] = P [ 8 ] [ 12 ] + P [ 5 ] [ 12 ] * dt ;
nextP [ 9 ] [ 12 ] = P [ 9 ] [ 12 ] + P [ 6 ] [ 12 ] * dt ;
2015-12-06 07:18:05 -04:00
nextP [ 10 ] [ 12 ] = P [ 10 ] [ 12 ] ;
nextP [ 11 ] [ 12 ] = P [ 11 ] [ 12 ] ;
nextP [ 12 ] [ 12 ] = P [ 12 ] [ 12 ] ;
2016-04-30 19:12:14 -03:00
2016-05-02 05:04:42 -03:00
// add process noise that is not from the IMU
for ( unsigned i = 0 ; i < = 12 ; i + + ) {
nextP [ i ] [ i ] + = process_noise [ i ] ;
}
2016-05-04 20:11:27 -03:00
// Don't calculate these covariance terms if IMU delta vlocity bias estimation is inhibited
if ( ! ( _params . fusion_mode & MASK_INHIBIT_ACC_BIAS ) ) {
// calculate variances and upper diagonal covariances for IMU delta velocity bias states
2016-04-30 19:12:14 -03:00
nextP [ 0 ] [ 13 ] = P [ 0 ] [ 13 ] + P [ 1 ] [ 13 ] * SF [ 9 ] + P [ 2 ] [ 13 ] * SF [ 11 ] + P [ 3 ] [ 13 ] * SF [ 10 ] + P [ 10 ] [ 13 ] * SF [ 14 ] + P [ 11 ] [ 13 ] * SF [ 15 ] + P [ 12 ] [ 13 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 13 ] = P [ 1 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 8 ] + P [ 2 ] [ 13 ] * SF [ 7 ] + P [ 3 ] [ 13 ] * SF [ 11 ] - P [ 12 ] [ 13 ] * SF [ 15 ] + P [ 11 ] [ 13 ] * SPP [ 10 ] - ( P [ 10 ] [ 13 ] * q0 ) / 2 ;
nextP [ 2 ] [ 13 ] = P [ 2 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 6 ] + P [ 1 ] [ 13 ] * SF [ 10 ] + P [ 3 ] [ 13 ] * SF [ 8 ] + P [ 12 ] [ 13 ] * SF [ 14 ] - P [ 10 ] [ 13 ] * SPP [ 10 ] - ( P [ 11 ] [ 13 ] * q0 ) / 2 ;
nextP [ 3 ] [ 13 ] = P [ 3 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 7 ] + P [ 1 ] [ 13 ] * SF [ 6 ] + P [ 2 ] [ 13 ] * SF [ 9 ] + P [ 10 ] [ 13 ] * SF [ 15 ] - P [ 11 ] [ 13 ] * SF [ 14 ] - ( P [ 12 ] [ 13 ] * q0 ) / 2 ;
2016-04-30 19:12:14 -03:00
nextP [ 4 ] [ 13 ] = P [ 4 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 5 ] + P [ 1 ] [ 13 ] * SF [ 3 ] - P [ 3 ] [ 13 ] * SF [ 4 ] + P [ 2 ] [ 13 ] * SPP [ 0 ] + P [ 13 ] [ 13 ] * SPP [ 3 ] + P [ 14 ] [ 13 ] * SPP [ 6 ] - P [ 15 ] [ 13 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 13 ] = P [ 5 ] [ 13 ] + P [ 0 ] [ 13 ] * SF [ 4 ] + P [ 2 ] [ 13 ] * SF [ 3 ] + P [ 3 ] [ 13 ] * SF [ 5 ] - P [ 1 ] [ 13 ] * SPP [ 0 ] - P [ 13 ] [ 13 ] * SPP [ 8 ] + P [ 14 ] [ 13 ] * SPP [ 2 ] + P [ 15 ] [ 13 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 13 ] = P [ 6 ] [ 13 ] + P [ 1 ] [ 13 ] * SF [ 4 ] - P [ 2 ] [ 13 ] * SF [ 5 ] + P [ 3 ] [ 13 ] * SF [ 3 ] + P [ 0 ] [ 13 ] * SPP [ 0 ] + P [ 13 ] [ 13 ] * SPP [ 4 ] - P [ 14 ] [ 13 ] * SPP [ 7 ] - P [ 15 ] [ 13 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 13 ] = P [ 7 ] [ 13 ] + P [ 4 ] [ 13 ] * dt ;
nextP [ 8 ] [ 13 ] = P [ 8 ] [ 13 ] + P [ 5 ] [ 13 ] * dt ;
nextP [ 9 ] [ 13 ] = P [ 9 ] [ 13 ] + P [ 6 ] [ 13 ] * dt ;
nextP [ 10 ] [ 13 ] = P [ 10 ] [ 13 ] ;
nextP [ 11 ] [ 13 ] = P [ 11 ] [ 13 ] ;
nextP [ 12 ] [ 13 ] = P [ 12 ] [ 13 ] ;
nextP [ 13 ] [ 13 ] = P [ 13 ] [ 13 ] ;
nextP [ 0 ] [ 14 ] = P [ 0 ] [ 14 ] + P [ 1 ] [ 14 ] * SF [ 9 ] + P [ 2 ] [ 14 ] * SF [ 11 ] + P [ 3 ] [ 14 ] * SF [ 10 ] + P [ 10 ] [ 14 ] * SF [ 14 ] + P [ 11 ] [ 14 ] * SF [ 15 ] + P [ 12 ] [ 14 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 14 ] = P [ 1 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 8 ] + P [ 2 ] [ 14 ] * SF [ 7 ] + P [ 3 ] [ 14 ] * SF [ 11 ] - P [ 12 ] [ 14 ] * SF [ 15 ] + P [ 11 ] [ 14 ] * SPP [ 10 ] - ( P [ 10 ] [ 14 ] * q0 ) / 2 ;
nextP [ 2 ] [ 14 ] = P [ 2 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 6 ] + P [ 1 ] [ 14 ] * SF [ 10 ] + P [ 3 ] [ 14 ] * SF [ 8 ] + P [ 12 ] [ 14 ] * SF [ 14 ] - P [ 10 ] [ 14 ] * SPP [ 10 ] - ( P [ 11 ] [ 14 ] * q0 ) / 2 ;
nextP [ 3 ] [ 14 ] = P [ 3 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 7 ] + P [ 1 ] [ 14 ] * SF [ 6 ] + P [ 2 ] [ 14 ] * SF [ 9 ] + P [ 10 ] [ 14 ] * SF [ 15 ] - P [ 11 ] [ 14 ] * SF [ 14 ] - ( P [ 12 ] [ 14 ] * q0 ) / 2 ;
2016-04-30 19:12:14 -03:00
nextP [ 4 ] [ 14 ] = P [ 4 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 5 ] + P [ 1 ] [ 14 ] * SF [ 3 ] - P [ 3 ] [ 14 ] * SF [ 4 ] + P [ 2 ] [ 14 ] * SPP [ 0 ] + P [ 13 ] [ 14 ] * SPP [ 3 ] + P [ 14 ] [ 14 ] * SPP [ 6 ] - P [ 15 ] [ 14 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 14 ] = P [ 5 ] [ 14 ] + P [ 0 ] [ 14 ] * SF [ 4 ] + P [ 2 ] [ 14 ] * SF [ 3 ] + P [ 3 ] [ 14 ] * SF [ 5 ] - P [ 1 ] [ 14 ] * SPP [ 0 ] - P [ 13 ] [ 14 ] * SPP [ 8 ] + P [ 14 ] [ 14 ] * SPP [ 2 ] + P [ 15 ] [ 14 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 14 ] = P [ 6 ] [ 14 ] + P [ 1 ] [ 14 ] * SF [ 4 ] - P [ 2 ] [ 14 ] * SF [ 5 ] + P [ 3 ] [ 14 ] * SF [ 3 ] + P [ 0 ] [ 14 ] * SPP [ 0 ] + P [ 13 ] [ 14 ] * SPP [ 4 ] - P [ 14 ] [ 14 ] * SPP [ 7 ] - P [ 15 ] [ 14 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 14 ] = P [ 7 ] [ 14 ] + P [ 4 ] [ 14 ] * dt ;
nextP [ 8 ] [ 14 ] = P [ 8 ] [ 14 ] + P [ 5 ] [ 14 ] * dt ;
nextP [ 9 ] [ 14 ] = P [ 9 ] [ 14 ] + P [ 6 ] [ 14 ] * dt ;
nextP [ 10 ] [ 14 ] = P [ 10 ] [ 14 ] ;
nextP [ 11 ] [ 14 ] = P [ 11 ] [ 14 ] ;
nextP [ 12 ] [ 14 ] = P [ 12 ] [ 14 ] ;
nextP [ 13 ] [ 14 ] = P [ 13 ] [ 14 ] ;
nextP [ 14 ] [ 14 ] = P [ 14 ] [ 14 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 0 ] [ 15 ] = P [ 0 ] [ 15 ] + P [ 1 ] [ 15 ] * SF [ 9 ] + P [ 2 ] [ 15 ] * SF [ 11 ] + P [ 3 ] [ 15 ] * SF [ 10 ] + P [ 10 ] [ 15 ] * SF [ 14 ] + P [ 11 ] [ 15 ] * SF [ 15 ] + P [ 12 ] [ 15 ] * SPP [ 10 ] ;
nextP [ 1 ] [ 15 ] = P [ 1 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 8 ] + P [ 2 ] [ 15 ] * SF [ 7 ] + P [ 3 ] [ 15 ] * SF [ 11 ] - P [ 12 ] [ 15 ] * SF [ 15 ] + P [ 11 ] [ 15 ] * SPP [ 10 ] - ( P [ 10 ] [ 15 ] * q0 ) / 2 ;
nextP [ 2 ] [ 15 ] = P [ 2 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 6 ] + P [ 1 ] [ 15 ] * SF [ 10 ] + P [ 3 ] [ 15 ] * SF [ 8 ] + P [ 12 ] [ 15 ] * SF [ 14 ] - P [ 10 ] [ 15 ] * SPP [ 10 ] - ( P [ 11 ] [ 15 ] * q0 ) / 2 ;
nextP [ 3 ] [ 15 ] = P [ 3 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 7 ] + P [ 1 ] [ 15 ] * SF [ 6 ] + P [ 2 ] [ 15 ] * SF [ 9 ] + P [ 10 ] [ 15 ] * SF [ 15 ] - P [ 11 ] [ 15 ] * SF [ 14 ] - ( P [ 12 ] [ 15 ] * q0 ) / 2 ;
nextP [ 4 ] [ 15 ] = P [ 4 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 5 ] + P [ 1 ] [ 15 ] * SF [ 3 ] - P [ 3 ] [ 15 ] * SF [ 4 ] + P [ 2 ] [ 15 ] * SPP [ 0 ] + P [ 13 ] [ 15 ] * SPP [ 3 ] + P [ 14 ] [ 15 ] * SPP [ 6 ] - P [ 15 ] [ 15 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 15 ] = P [ 5 ] [ 15 ] + P [ 0 ] [ 15 ] * SF [ 4 ] + P [ 2 ] [ 15 ] * SF [ 3 ] + P [ 3 ] [ 15 ] * SF [ 5 ] - P [ 1 ] [ 15 ] * SPP [ 0 ] - P [ 13 ] [ 15 ] * SPP [ 8 ] + P [ 14 ] [ 15 ] * SPP [ 2 ] + P [ 15 ] [ 15 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 15 ] = P [ 6 ] [ 15 ] + P [ 1 ] [ 15 ] * SF [ 4 ] - P [ 2 ] [ 15 ] * SF [ 5 ] + P [ 3 ] [ 15 ] * SF [ 3 ] + P [ 0 ] [ 15 ] * SPP [ 0 ] + P [ 13 ] [ 15 ] * SPP [ 4 ] - P [ 14 ] [ 15 ] * SPP [ 7 ] - P [ 15 ] [ 15 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 15 ] = P [ 7 ] [ 15 ] + P [ 4 ] [ 15 ] * dt ;
nextP [ 8 ] [ 15 ] = P [ 8 ] [ 15 ] + P [ 5 ] [ 15 ] * dt ;
nextP [ 9 ] [ 15 ] = P [ 9 ] [ 15 ] + P [ 6 ] [ 15 ] * dt ;
nextP [ 10 ] [ 15 ] = P [ 10 ] [ 15 ] ;
nextP [ 11 ] [ 15 ] = P [ 11 ] [ 15 ] ;
nextP [ 12 ] [ 15 ] = P [ 12 ] [ 15 ] ;
nextP [ 13 ] [ 15 ] = P [ 13 ] [ 15 ] ;
nextP [ 14 ] [ 15 ] = P [ 14 ] [ 15 ] ;
nextP [ 15 ] [ 15 ] = P [ 15 ] [ 15 ] ;
2016-05-02 05:04:42 -03:00
// add process noise that is not from the IMU
2016-05-04 20:11:27 -03:00
for ( unsigned i = 13 ; i < = 15 ; i + + ) {
2016-05-02 05:04:42 -03:00
nextP [ i ] [ i ] + = process_noise [ i ] ;
}
2016-04-30 19:12:14 -03:00
}
2016-02-15 20:06:54 -04:00
// Don't do covariance prediction on magnetic field states unless we are using 3-axis fusion
if ( _control_status . flags . mag_3D ) {
// Check if we have just transitioned into 3-axis fusion and set the state variances
if ( ! _control_status_prev . flags . mag_3D ) {
for ( uint8_t index = 16 ; index < = 21 ; index + + ) {
P [ index ] [ index ] = sq ( fmaxf ( _params . mag_noise , 0.001f ) ) ;
}
}
2016-05-04 20:11:27 -03:00
// calculate variances and upper diagonal covariances for earth and body magnetic field states
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 16 ] = P [ 0 ] [ 16 ] + P [ 1 ] [ 16 ] * SF [ 9 ] + P [ 2 ] [ 16 ] * SF [ 11 ] + P [ 3 ] [ 16 ] * SF [ 10 ] + P [ 10 ] [ 16 ] * SF [ 14 ] + P [ 11 ] [ 16 ] * SF [ 15 ] + P [ 12 ] [ 16 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 16 ] = P [ 1 ] [ 16 ] + P [ 0 ] [ 16 ] * SF [ 8 ] + P [ 2 ] [ 16 ] * SF [ 7 ] + P [ 3 ] [ 16 ] * SF [ 11 ] - P [ 12 ] [ 16 ] * SF [ 15 ] + P [ 11 ] [ 16 ] * SPP [ 10 ] - ( P [ 10 ] [ 16 ] * q0 ) / 2 ;
nextP [ 2 ] [ 16 ] = P [ 2 ] [ 16 ] + P [ 0 ] [ 16 ] * SF [ 6 ] + P [ 1 ] [ 16 ] * SF [ 10 ] + P [ 3 ] [ 16 ] * SF [ 8 ] + P [ 12 ] [ 16 ] * SF [ 14 ] - P [ 10 ] [ 16 ] * SPP [ 10 ] - ( P [ 11 ] [ 16 ] * q0 ) / 2 ;
nextP [ 3 ] [ 16 ] = P [ 3 ] [ 16 ] + P [ 0 ] [ 16 ] * SF [ 7 ] + P [ 1 ] [ 16 ] * SF [ 6 ] + P [ 2 ] [ 16 ] * SF [ 9 ] + P [ 10 ] [ 16 ] * SF [ 15 ] - P [ 11 ] [ 16 ] * SF [ 14 ] - ( P [ 12 ] [ 16 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 16 ] = P [ 4 ] [ 16 ] + P [ 0 ] [ 16 ] * SF [ 5 ] + P [ 1 ] [ 16 ] * SF [ 3 ] - P [ 3 ] [ 16 ] * SF [ 4 ] + P [ 2 ] [ 16 ] * SPP [ 0 ] + P [ 13 ] [ 16 ] * SPP [ 3 ] + P [ 14 ] [ 16 ] * SPP [ 6 ] - P [ 15 ] [ 16 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 16 ] = P [ 5 ] [ 16 ] + P [ 0 ] [ 16 ] * SF [ 4 ] + P [ 2 ] [ 16 ] * SF [ 3 ] + P [ 3 ] [ 16 ] * SF [ 5 ] - P [ 1 ] [ 16 ] * SPP [ 0 ] - P [ 13 ] [ 16 ] * SPP [ 8 ] + P [ 14 ] [ 16 ] * SPP [ 2 ] + P [ 15 ] [ 16 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 16 ] = P [ 6 ] [ 16 ] + P [ 1 ] [ 16 ] * SF [ 4 ] - P [ 2 ] [ 16 ] * SF [ 5 ] + P [ 3 ] [ 16 ] * SF [ 3 ] + P [ 0 ] [ 16 ] * SPP [ 0 ] + P [ 13 ] [ 16 ] * SPP [ 4 ] - P [ 14 ] [ 16 ] * SPP [ 7 ] - P [ 15 ] [ 16 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 16 ] = P [ 7 ] [ 16 ] + P [ 4 ] [ 16 ] * dt ;
nextP [ 8 ] [ 16 ] = P [ 8 ] [ 16 ] + P [ 5 ] [ 16 ] * dt ;
nextP [ 9 ] [ 16 ] = P [ 9 ] [ 16 ] + P [ 6 ] [ 16 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 16 ] = P [ 10 ] [ 16 ] ;
nextP [ 11 ] [ 16 ] = P [ 11 ] [ 16 ] ;
nextP [ 12 ] [ 16 ] = P [ 12 ] [ 16 ] ;
nextP [ 13 ] [ 16 ] = P [ 13 ] [ 16 ] ;
nextP [ 14 ] [ 16 ] = P [ 14 ] [ 16 ] ;
nextP [ 15 ] [ 16 ] = P [ 15 ] [ 16 ] ;
nextP [ 16 ] [ 16 ] = P [ 16 ] [ 16 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 17 ] = P [ 0 ] [ 17 ] + P [ 1 ] [ 17 ] * SF [ 9 ] + P [ 2 ] [ 17 ] * SF [ 11 ] + P [ 3 ] [ 17 ] * SF [ 10 ] + P [ 10 ] [ 17 ] * SF [ 14 ] + P [ 11 ] [ 17 ] * SF [ 15 ] + P [ 12 ] [ 17 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 17 ] = P [ 1 ] [ 17 ] + P [ 0 ] [ 17 ] * SF [ 8 ] + P [ 2 ] [ 17 ] * SF [ 7 ] + P [ 3 ] [ 17 ] * SF [ 11 ] - P [ 12 ] [ 17 ] * SF [ 15 ] + P [ 11 ] [ 17 ] * SPP [ 10 ] - ( P [ 10 ] [ 17 ] * q0 ) / 2 ;
nextP [ 2 ] [ 17 ] = P [ 2 ] [ 17 ] + P [ 0 ] [ 17 ] * SF [ 6 ] + P [ 1 ] [ 17 ] * SF [ 10 ] + P [ 3 ] [ 17 ] * SF [ 8 ] + P [ 12 ] [ 17 ] * SF [ 14 ] - P [ 10 ] [ 17 ] * SPP [ 10 ] - ( P [ 11 ] [ 17 ] * q0 ) / 2 ;
nextP [ 3 ] [ 17 ] = P [ 3 ] [ 17 ] + P [ 0 ] [ 17 ] * SF [ 7 ] + P [ 1 ] [ 17 ] * SF [ 6 ] + P [ 2 ] [ 17 ] * SF [ 9 ] + P [ 10 ] [ 17 ] * SF [ 15 ] - P [ 11 ] [ 17 ] * SF [ 14 ] - ( P [ 12 ] [ 17 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 17 ] = P [ 4 ] [ 17 ] + P [ 0 ] [ 17 ] * SF [ 5 ] + P [ 1 ] [ 17 ] * SF [ 3 ] - P [ 3 ] [ 17 ] * SF [ 4 ] + P [ 2 ] [ 17 ] * SPP [ 0 ] + P [ 13 ] [ 17 ] * SPP [ 3 ] + P [ 14 ] [ 17 ] * SPP [ 6 ] - P [ 15 ] [ 17 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 17 ] = P [ 5 ] [ 17 ] + P [ 0 ] [ 17 ] * SF [ 4 ] + P [ 2 ] [ 17 ] * SF [ 3 ] + P [ 3 ] [ 17 ] * SF [ 5 ] - P [ 1 ] [ 17 ] * SPP [ 0 ] - P [ 13 ] [ 17 ] * SPP [ 8 ] + P [ 14 ] [ 17 ] * SPP [ 2 ] + P [ 15 ] [ 17 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 17 ] = P [ 6 ] [ 17 ] + P [ 1 ] [ 17 ] * SF [ 4 ] - P [ 2 ] [ 17 ] * SF [ 5 ] + P [ 3 ] [ 17 ] * SF [ 3 ] + P [ 0 ] [ 17 ] * SPP [ 0 ] + P [ 13 ] [ 17 ] * SPP [ 4 ] - P [ 14 ] [ 17 ] * SPP [ 7 ] - P [ 15 ] [ 17 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 17 ] = P [ 7 ] [ 17 ] + P [ 4 ] [ 17 ] * dt ;
nextP [ 8 ] [ 17 ] = P [ 8 ] [ 17 ] + P [ 5 ] [ 17 ] * dt ;
nextP [ 9 ] [ 17 ] = P [ 9 ] [ 17 ] + P [ 6 ] [ 17 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 17 ] = P [ 10 ] [ 17 ] ;
nextP [ 11 ] [ 17 ] = P [ 11 ] [ 17 ] ;
nextP [ 12 ] [ 17 ] = P [ 12 ] [ 17 ] ;
nextP [ 13 ] [ 17 ] = P [ 13 ] [ 17 ] ;
nextP [ 14 ] [ 17 ] = P [ 14 ] [ 17 ] ;
nextP [ 15 ] [ 17 ] = P [ 15 ] [ 17 ] ;
nextP [ 16 ] [ 17 ] = P [ 16 ] [ 17 ] ;
nextP [ 17 ] [ 17 ] = P [ 17 ] [ 17 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 18 ] = P [ 0 ] [ 18 ] + P [ 1 ] [ 18 ] * SF [ 9 ] + P [ 2 ] [ 18 ] * SF [ 11 ] + P [ 3 ] [ 18 ] * SF [ 10 ] + P [ 10 ] [ 18 ] * SF [ 14 ] + P [ 11 ] [ 18 ] * SF [ 15 ] + P [ 12 ] [ 18 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 18 ] = P [ 1 ] [ 18 ] + P [ 0 ] [ 18 ] * SF [ 8 ] + P [ 2 ] [ 18 ] * SF [ 7 ] + P [ 3 ] [ 18 ] * SF [ 11 ] - P [ 12 ] [ 18 ] * SF [ 15 ] + P [ 11 ] [ 18 ] * SPP [ 10 ] - ( P [ 10 ] [ 18 ] * q0 ) / 2 ;
nextP [ 2 ] [ 18 ] = P [ 2 ] [ 18 ] + P [ 0 ] [ 18 ] * SF [ 6 ] + P [ 1 ] [ 18 ] * SF [ 10 ] + P [ 3 ] [ 18 ] * SF [ 8 ] + P [ 12 ] [ 18 ] * SF [ 14 ] - P [ 10 ] [ 18 ] * SPP [ 10 ] - ( P [ 11 ] [ 18 ] * q0 ) / 2 ;
nextP [ 3 ] [ 18 ] = P [ 3 ] [ 18 ] + P [ 0 ] [ 18 ] * SF [ 7 ] + P [ 1 ] [ 18 ] * SF [ 6 ] + P [ 2 ] [ 18 ] * SF [ 9 ] + P [ 10 ] [ 18 ] * SF [ 15 ] - P [ 11 ] [ 18 ] * SF [ 14 ] - ( P [ 12 ] [ 18 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 18 ] = P [ 4 ] [ 18 ] + P [ 0 ] [ 18 ] * SF [ 5 ] + P [ 1 ] [ 18 ] * SF [ 3 ] - P [ 3 ] [ 18 ] * SF [ 4 ] + P [ 2 ] [ 18 ] * SPP [ 0 ] + P [ 13 ] [ 18 ] * SPP [ 3 ] + P [ 14 ] [ 18 ] * SPP [ 6 ] - P [ 15 ] [ 18 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 18 ] = P [ 5 ] [ 18 ] + P [ 0 ] [ 18 ] * SF [ 4 ] + P [ 2 ] [ 18 ] * SF [ 3 ] + P [ 3 ] [ 18 ] * SF [ 5 ] - P [ 1 ] [ 18 ] * SPP [ 0 ] - P [ 13 ] [ 18 ] * SPP [ 8 ] + P [ 14 ] [ 18 ] * SPP [ 2 ] + P [ 15 ] [ 18 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 18 ] = P [ 6 ] [ 18 ] + P [ 1 ] [ 18 ] * SF [ 4 ] - P [ 2 ] [ 18 ] * SF [ 5 ] + P [ 3 ] [ 18 ] * SF [ 3 ] + P [ 0 ] [ 18 ] * SPP [ 0 ] + P [ 13 ] [ 18 ] * SPP [ 4 ] - P [ 14 ] [ 18 ] * SPP [ 7 ] - P [ 15 ] [ 18 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 18 ] = P [ 7 ] [ 18 ] + P [ 4 ] [ 18 ] * dt ;
nextP [ 8 ] [ 18 ] = P [ 8 ] [ 18 ] + P [ 5 ] [ 18 ] * dt ;
nextP [ 9 ] [ 18 ] = P [ 9 ] [ 18 ] + P [ 6 ] [ 18 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 18 ] = P [ 10 ] [ 18 ] ;
nextP [ 11 ] [ 18 ] = P [ 11 ] [ 18 ] ;
nextP [ 12 ] [ 18 ] = P [ 12 ] [ 18 ] ;
nextP [ 13 ] [ 18 ] = P [ 13 ] [ 18 ] ;
nextP [ 14 ] [ 18 ] = P [ 14 ] [ 18 ] ;
nextP [ 15 ] [ 18 ] = P [ 15 ] [ 18 ] ;
nextP [ 16 ] [ 18 ] = P [ 16 ] [ 18 ] ;
nextP [ 17 ] [ 18 ] = P [ 17 ] [ 18 ] ;
nextP [ 18 ] [ 18 ] = P [ 18 ] [ 18 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 19 ] = P [ 0 ] [ 19 ] + P [ 1 ] [ 19 ] * SF [ 9 ] + P [ 2 ] [ 19 ] * SF [ 11 ] + P [ 3 ] [ 19 ] * SF [ 10 ] + P [ 10 ] [ 19 ] * SF [ 14 ] + P [ 11 ] [ 19 ] * SF [ 15 ] + P [ 12 ] [ 19 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 19 ] = P [ 1 ] [ 19 ] + P [ 0 ] [ 19 ] * SF [ 8 ] + P [ 2 ] [ 19 ] * SF [ 7 ] + P [ 3 ] [ 19 ] * SF [ 11 ] - P [ 12 ] [ 19 ] * SF [ 15 ] + P [ 11 ] [ 19 ] * SPP [ 10 ] - ( P [ 10 ] [ 19 ] * q0 ) / 2 ;
nextP [ 2 ] [ 19 ] = P [ 2 ] [ 19 ] + P [ 0 ] [ 19 ] * SF [ 6 ] + P [ 1 ] [ 19 ] * SF [ 10 ] + P [ 3 ] [ 19 ] * SF [ 8 ] + P [ 12 ] [ 19 ] * SF [ 14 ] - P [ 10 ] [ 19 ] * SPP [ 10 ] - ( P [ 11 ] [ 19 ] * q0 ) / 2 ;
nextP [ 3 ] [ 19 ] = P [ 3 ] [ 19 ] + P [ 0 ] [ 19 ] * SF [ 7 ] + P [ 1 ] [ 19 ] * SF [ 6 ] + P [ 2 ] [ 19 ] * SF [ 9 ] + P [ 10 ] [ 19 ] * SF [ 15 ] - P [ 11 ] [ 19 ] * SF [ 14 ] - ( P [ 12 ] [ 19 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 19 ] = P [ 4 ] [ 19 ] + P [ 0 ] [ 19 ] * SF [ 5 ] + P [ 1 ] [ 19 ] * SF [ 3 ] - P [ 3 ] [ 19 ] * SF [ 4 ] + P [ 2 ] [ 19 ] * SPP [ 0 ] + P [ 13 ] [ 19 ] * SPP [ 3 ] + P [ 14 ] [ 19 ] * SPP [ 6 ] - P [ 15 ] [ 19 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 19 ] = P [ 5 ] [ 19 ] + P [ 0 ] [ 19 ] * SF [ 4 ] + P [ 2 ] [ 19 ] * SF [ 3 ] + P [ 3 ] [ 19 ] * SF [ 5 ] - P [ 1 ] [ 19 ] * SPP [ 0 ] - P [ 13 ] [ 19 ] * SPP [ 8 ] + P [ 14 ] [ 19 ] * SPP [ 2 ] + P [ 15 ] [ 19 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 19 ] = P [ 6 ] [ 19 ] + P [ 1 ] [ 19 ] * SF [ 4 ] - P [ 2 ] [ 19 ] * SF [ 5 ] + P [ 3 ] [ 19 ] * SF [ 3 ] + P [ 0 ] [ 19 ] * SPP [ 0 ] + P [ 13 ] [ 19 ] * SPP [ 4 ] - P [ 14 ] [ 19 ] * SPP [ 7 ] - P [ 15 ] [ 19 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 19 ] = P [ 7 ] [ 19 ] + P [ 4 ] [ 19 ] * dt ;
nextP [ 8 ] [ 19 ] = P [ 8 ] [ 19 ] + P [ 5 ] [ 19 ] * dt ;
nextP [ 9 ] [ 19 ] = P [ 9 ] [ 19 ] + P [ 6 ] [ 19 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 19 ] = P [ 10 ] [ 19 ] ;
nextP [ 11 ] [ 19 ] = P [ 11 ] [ 19 ] ;
nextP [ 12 ] [ 19 ] = P [ 12 ] [ 19 ] ;
nextP [ 13 ] [ 19 ] = P [ 13 ] [ 19 ] ;
nextP [ 14 ] [ 19 ] = P [ 14 ] [ 19 ] ;
nextP [ 15 ] [ 19 ] = P [ 15 ] [ 19 ] ;
nextP [ 16 ] [ 19 ] = P [ 16 ] [ 19 ] ;
nextP [ 17 ] [ 19 ] = P [ 17 ] [ 19 ] ;
nextP [ 18 ] [ 19 ] = P [ 18 ] [ 19 ] ;
nextP [ 19 ] [ 19 ] = P [ 19 ] [ 19 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 20 ] = P [ 0 ] [ 20 ] + P [ 1 ] [ 20 ] * SF [ 9 ] + P [ 2 ] [ 20 ] * SF [ 11 ] + P [ 3 ] [ 20 ] * SF [ 10 ] + P [ 10 ] [ 20 ] * SF [ 14 ] + P [ 11 ] [ 20 ] * SF [ 15 ] + P [ 12 ] [ 20 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 20 ] = P [ 1 ] [ 20 ] + P [ 0 ] [ 20 ] * SF [ 8 ] + P [ 2 ] [ 20 ] * SF [ 7 ] + P [ 3 ] [ 20 ] * SF [ 11 ] - P [ 12 ] [ 20 ] * SF [ 15 ] + P [ 11 ] [ 20 ] * SPP [ 10 ] - ( P [ 10 ] [ 20 ] * q0 ) / 2 ;
nextP [ 2 ] [ 20 ] = P [ 2 ] [ 20 ] + P [ 0 ] [ 20 ] * SF [ 6 ] + P [ 1 ] [ 20 ] * SF [ 10 ] + P [ 3 ] [ 20 ] * SF [ 8 ] + P [ 12 ] [ 20 ] * SF [ 14 ] - P [ 10 ] [ 20 ] * SPP [ 10 ] - ( P [ 11 ] [ 20 ] * q0 ) / 2 ;
nextP [ 3 ] [ 20 ] = P [ 3 ] [ 20 ] + P [ 0 ] [ 20 ] * SF [ 7 ] + P [ 1 ] [ 20 ] * SF [ 6 ] + P [ 2 ] [ 20 ] * SF [ 9 ] + P [ 10 ] [ 20 ] * SF [ 15 ] - P [ 11 ] [ 20 ] * SF [ 14 ] - ( P [ 12 ] [ 20 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 20 ] = P [ 4 ] [ 20 ] + P [ 0 ] [ 20 ] * SF [ 5 ] + P [ 1 ] [ 20 ] * SF [ 3 ] - P [ 3 ] [ 20 ] * SF [ 4 ] + P [ 2 ] [ 20 ] * SPP [ 0 ] + P [ 13 ] [ 20 ] * SPP [ 3 ] + P [ 14 ] [ 20 ] * SPP [ 6 ] - P [ 15 ] [ 20 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 20 ] = P [ 5 ] [ 20 ] + P [ 0 ] [ 20 ] * SF [ 4 ] + P [ 2 ] [ 20 ] * SF [ 3 ] + P [ 3 ] [ 20 ] * SF [ 5 ] - P [ 1 ] [ 20 ] * SPP [ 0 ] - P [ 13 ] [ 20 ] * SPP [ 8 ] + P [ 14 ] [ 20 ] * SPP [ 2 ] + P [ 15 ] [ 20 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 20 ] = P [ 6 ] [ 20 ] + P [ 1 ] [ 20 ] * SF [ 4 ] - P [ 2 ] [ 20 ] * SF [ 5 ] + P [ 3 ] [ 20 ] * SF [ 3 ] + P [ 0 ] [ 20 ] * SPP [ 0 ] + P [ 13 ] [ 20 ] * SPP [ 4 ] - P [ 14 ] [ 20 ] * SPP [ 7 ] - P [ 15 ] [ 20 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 20 ] = P [ 7 ] [ 20 ] + P [ 4 ] [ 20 ] * dt ;
nextP [ 8 ] [ 20 ] = P [ 8 ] [ 20 ] + P [ 5 ] [ 20 ] * dt ;
nextP [ 9 ] [ 20 ] = P [ 9 ] [ 20 ] + P [ 6 ] [ 20 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 20 ] = P [ 10 ] [ 20 ] ;
nextP [ 11 ] [ 20 ] = P [ 11 ] [ 20 ] ;
nextP [ 12 ] [ 20 ] = P [ 12 ] [ 20 ] ;
nextP [ 13 ] [ 20 ] = P [ 13 ] [ 20 ] ;
nextP [ 14 ] [ 20 ] = P [ 14 ] [ 20 ] ;
nextP [ 15 ] [ 20 ] = P [ 15 ] [ 20 ] ;
nextP [ 16 ] [ 20 ] = P [ 16 ] [ 20 ] ;
nextP [ 17 ] [ 20 ] = P [ 17 ] [ 20 ] ;
nextP [ 18 ] [ 20 ] = P [ 18 ] [ 20 ] ;
nextP [ 19 ] [ 20 ] = P [ 19 ] [ 20 ] ;
nextP [ 20 ] [ 20 ] = P [ 20 ] [ 20 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 21 ] = P [ 0 ] [ 21 ] + P [ 1 ] [ 21 ] * SF [ 9 ] + P [ 2 ] [ 21 ] * SF [ 11 ] + P [ 3 ] [ 21 ] * SF [ 10 ] + P [ 10 ] [ 21 ] * SF [ 14 ] + P [ 11 ] [ 21 ] * SF [ 15 ] + P [ 12 ] [ 21 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 21 ] = P [ 1 ] [ 21 ] + P [ 0 ] [ 21 ] * SF [ 8 ] + P [ 2 ] [ 21 ] * SF [ 7 ] + P [ 3 ] [ 21 ] * SF [ 11 ] - P [ 12 ] [ 21 ] * SF [ 15 ] + P [ 11 ] [ 21 ] * SPP [ 10 ] - ( P [ 10 ] [ 21 ] * q0 ) / 2 ;
nextP [ 2 ] [ 21 ] = P [ 2 ] [ 21 ] + P [ 0 ] [ 21 ] * SF [ 6 ] + P [ 1 ] [ 21 ] * SF [ 10 ] + P [ 3 ] [ 21 ] * SF [ 8 ] + P [ 12 ] [ 21 ] * SF [ 14 ] - P [ 10 ] [ 21 ] * SPP [ 10 ] - ( P [ 11 ] [ 21 ] * q0 ) / 2 ;
nextP [ 3 ] [ 21 ] = P [ 3 ] [ 21 ] + P [ 0 ] [ 21 ] * SF [ 7 ] + P [ 1 ] [ 21 ] * SF [ 6 ] + P [ 2 ] [ 21 ] * SF [ 9 ] + P [ 10 ] [ 21 ] * SF [ 15 ] - P [ 11 ] [ 21 ] * SF [ 14 ] - ( P [ 12 ] [ 21 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 21 ] = P [ 4 ] [ 21 ] + P [ 0 ] [ 21 ] * SF [ 5 ] + P [ 1 ] [ 21 ] * SF [ 3 ] - P [ 3 ] [ 21 ] * SF [ 4 ] + P [ 2 ] [ 21 ] * SPP [ 0 ] + P [ 13 ] [ 21 ] * SPP [ 3 ] + P [ 14 ] [ 21 ] * SPP [ 6 ] - P [ 15 ] [ 21 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 21 ] = P [ 5 ] [ 21 ] + P [ 0 ] [ 21 ] * SF [ 4 ] + P [ 2 ] [ 21 ] * SF [ 3 ] + P [ 3 ] [ 21 ] * SF [ 5 ] - P [ 1 ] [ 21 ] * SPP [ 0 ] - P [ 13 ] [ 21 ] * SPP [ 8 ] + P [ 14 ] [ 21 ] * SPP [ 2 ] + P [ 15 ] [ 21 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 21 ] = P [ 6 ] [ 21 ] + P [ 1 ] [ 21 ] * SF [ 4 ] - P [ 2 ] [ 21 ] * SF [ 5 ] + P [ 3 ] [ 21 ] * SF [ 3 ] + P [ 0 ] [ 21 ] * SPP [ 0 ] + P [ 13 ] [ 21 ] * SPP [ 4 ] - P [ 14 ] [ 21 ] * SPP [ 7 ] - P [ 15 ] [ 21 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 21 ] = P [ 7 ] [ 21 ] + P [ 4 ] [ 21 ] * dt ;
nextP [ 8 ] [ 21 ] = P [ 8 ] [ 21 ] + P [ 5 ] [ 21 ] * dt ;
nextP [ 9 ] [ 21 ] = P [ 9 ] [ 21 ] + P [ 6 ] [ 21 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 21 ] = P [ 10 ] [ 21 ] ;
nextP [ 11 ] [ 21 ] = P [ 11 ] [ 21 ] ;
nextP [ 12 ] [ 21 ] = P [ 12 ] [ 21 ] ;
nextP [ 13 ] [ 21 ] = P [ 13 ] [ 21 ] ;
nextP [ 14 ] [ 21 ] = P [ 14 ] [ 21 ] ;
nextP [ 15 ] [ 21 ] = P [ 15 ] [ 21 ] ;
nextP [ 16 ] [ 21 ] = P [ 16 ] [ 21 ] ;
nextP [ 17 ] [ 21 ] = P [ 17 ] [ 21 ] ;
nextP [ 18 ] [ 21 ] = P [ 18 ] [ 21 ] ;
nextP [ 19 ] [ 21 ] = P [ 19 ] [ 21 ] ;
nextP [ 20 ] [ 21 ] = P [ 20 ] [ 21 ] ;
nextP [ 21 ] [ 21 ] = P [ 21 ] [ 21 ] ;
2016-04-27 23:05:54 -03:00
2016-05-02 05:04:42 -03:00
// add process noise that is not from the IMU
for ( unsigned i = 16 ; i < = 21 ; i + + ) {
nextP [ i ] [ i ] + = process_noise [ i ] ;
}
2016-04-30 19:12:14 -03:00
2016-02-15 20:06:54 -04:00
}
// Don't do covariance prediction on wind states unless we are using them
if ( _control_status . flags . wind ) {
2016-04-05 10:14:04 -03:00
// Check if we have just transitioned to using wind states and set the variances accordingly
if ( ! _control_status_prev . flags . wind ) {
// simple initialisation of wind states: calculate wind component along the forward axis
// of the plane.
matrix : : Euler < float > euler ( _output_new . quat_nominal ) ;
float heading = euler ( 2 ) ;
// ground speed component in the xy plane projected onto the directon the plane is heading to
float ground_speed_xy_nose = _output_new . vel ( 0 ) * cosf ( heading ) + _output_new . vel ( 1 ) * sinf ( heading ) ;
airspeedSample tmp = _airspeed_buffer . get_newest ( ) ;
float airspeed = tmp . true_airspeed ;
// check if the calculation is well conditioned:
// our airspeed measurement is at least as hight as our down velocity and the plane is moving forward
if ( airspeed > fabsf ( _output_new . vel ( 2 ) ) & & ground_speed_xy_nose > 0 ) {
float ground_speed = sqrtf ( _output_new . vel ( 0 ) * _output_new . vel ( 0 ) + _output_new . vel ( 1 ) * _output_new . vel ( 1 ) + _output_new . vel ( 2 ) * _output_new . vel ( 2 ) ) ;
// wind magnitude in the direction the plane is
float wind_magnitude = ground_speed_xy_nose - sqrtf ( airspeed * airspeed - _output_new . vel ( 2 ) * _output_new . vel ( 2 ) ) ;
// determine direction of wind
float wind_sign = 1 ;
if ( airspeed < ground_speed ) {
// wind is in nose direction
wind_sign = 1 ;
} else {
wind_sign = - 1 ;
}
_state . wind_vel ( 0 ) = cosf ( heading ) * wind_magnitude * wind_sign ;
_state . wind_vel ( 1 ) = sinf ( heading ) * wind_magnitude * wind_sign ;
} else {
// calculation is badly conditioned, just set wind states to zero
_state . wind_vel . setZero ( ) ;
}
// initialise diagonal of covariance matrix for the wind velocity states
2016-02-15 20:06:54 -04:00
for ( uint8_t index = 22 ; index < = 23 ; index + + ) {
P [ index ] [ index ] = sq ( 5.0f ) ;
}
}
2016-05-04 20:11:27 -03:00
// calculate variances and upper diagonal covariances for wind states
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 22 ] = P [ 0 ] [ 22 ] + P [ 1 ] [ 22 ] * SF [ 9 ] + P [ 2 ] [ 22 ] * SF [ 11 ] + P [ 3 ] [ 22 ] * SF [ 10 ] + P [ 10 ] [ 22 ] * SF [ 14 ] + P [ 11 ] [ 22 ] * SF [ 15 ] + P [ 12 ] [ 22 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 22 ] = P [ 1 ] [ 22 ] + P [ 0 ] [ 22 ] * SF [ 8 ] + P [ 2 ] [ 22 ] * SF [ 7 ] + P [ 3 ] [ 22 ] * SF [ 11 ] - P [ 12 ] [ 22 ] * SF [ 15 ] + P [ 11 ] [ 22 ] * SPP [ 10 ] - ( P [ 10 ] [ 22 ] * q0 ) / 2 ;
nextP [ 2 ] [ 22 ] = P [ 2 ] [ 22 ] + P [ 0 ] [ 22 ] * SF [ 6 ] + P [ 1 ] [ 22 ] * SF [ 10 ] + P [ 3 ] [ 22 ] * SF [ 8 ] + P [ 12 ] [ 22 ] * SF [ 14 ] - P [ 10 ] [ 22 ] * SPP [ 10 ] - ( P [ 11 ] [ 22 ] * q0 ) / 2 ;
nextP [ 3 ] [ 22 ] = P [ 3 ] [ 22 ] + P [ 0 ] [ 22 ] * SF [ 7 ] + P [ 1 ] [ 22 ] * SF [ 6 ] + P [ 2 ] [ 22 ] * SF [ 9 ] + P [ 10 ] [ 22 ] * SF [ 15 ] - P [ 11 ] [ 22 ] * SF [ 14 ] - ( P [ 12 ] [ 22 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 22 ] = P [ 4 ] [ 22 ] + P [ 0 ] [ 22 ] * SF [ 5 ] + P [ 1 ] [ 22 ] * SF [ 3 ] - P [ 3 ] [ 22 ] * SF [ 4 ] + P [ 2 ] [ 22 ] * SPP [ 0 ] + P [ 13 ] [ 22 ] * SPP [ 3 ] + P [ 14 ] [ 22 ] * SPP [ 6 ] - P [ 15 ] [ 22 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 22 ] = P [ 5 ] [ 22 ] + P [ 0 ] [ 22 ] * SF [ 4 ] + P [ 2 ] [ 22 ] * SF [ 3 ] + P [ 3 ] [ 22 ] * SF [ 5 ] - P [ 1 ] [ 22 ] * SPP [ 0 ] - P [ 13 ] [ 22 ] * SPP [ 8 ] + P [ 14 ] [ 22 ] * SPP [ 2 ] + P [ 15 ] [ 22 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 22 ] = P [ 6 ] [ 22 ] + P [ 1 ] [ 22 ] * SF [ 4 ] - P [ 2 ] [ 22 ] * SF [ 5 ] + P [ 3 ] [ 22 ] * SF [ 3 ] + P [ 0 ] [ 22 ] * SPP [ 0 ] + P [ 13 ] [ 22 ] * SPP [ 4 ] - P [ 14 ] [ 22 ] * SPP [ 7 ] - P [ 15 ] [ 22 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 22 ] = P [ 7 ] [ 22 ] + P [ 4 ] [ 22 ] * dt ;
nextP [ 8 ] [ 22 ] = P [ 8 ] [ 22 ] + P [ 5 ] [ 22 ] * dt ;
nextP [ 9 ] [ 22 ] = P [ 9 ] [ 22 ] + P [ 6 ] [ 22 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 22 ] = P [ 10 ] [ 22 ] ;
nextP [ 11 ] [ 22 ] = P [ 11 ] [ 22 ] ;
nextP [ 12 ] [ 22 ] = P [ 12 ] [ 22 ] ;
nextP [ 13 ] [ 22 ] = P [ 13 ] [ 22 ] ;
nextP [ 14 ] [ 22 ] = P [ 14 ] [ 22 ] ;
nextP [ 15 ] [ 22 ] = P [ 15 ] [ 22 ] ;
nextP [ 16 ] [ 22 ] = P [ 16 ] [ 22 ] ;
nextP [ 17 ] [ 22 ] = P [ 17 ] [ 22 ] ;
nextP [ 18 ] [ 22 ] = P [ 18 ] [ 22 ] ;
nextP [ 19 ] [ 22 ] = P [ 19 ] [ 22 ] ;
nextP [ 20 ] [ 22 ] = P [ 20 ] [ 22 ] ;
nextP [ 21 ] [ 22 ] = P [ 21 ] [ 22 ] ;
nextP [ 22 ] [ 22 ] = P [ 22 ] [ 22 ] ;
2016-04-27 23:05:54 -03:00
nextP [ 0 ] [ 23 ] = P [ 0 ] [ 23 ] + P [ 1 ] [ 23 ] * SF [ 9 ] + P [ 2 ] [ 23 ] * SF [ 11 ] + P [ 3 ] [ 23 ] * SF [ 10 ] + P [ 10 ] [ 23 ] * SF [ 14 ] + P [ 11 ] [ 23 ] * SF [ 15 ] + P [ 12 ] [ 23 ] * SPP [ 10 ] ;
2016-05-04 20:11:27 -03:00
nextP [ 1 ] [ 23 ] = P [ 1 ] [ 23 ] + P [ 0 ] [ 23 ] * SF [ 8 ] + P [ 2 ] [ 23 ] * SF [ 7 ] + P [ 3 ] [ 23 ] * SF [ 11 ] - P [ 12 ] [ 23 ] * SF [ 15 ] + P [ 11 ] [ 23 ] * SPP [ 10 ] - ( P [ 10 ] [ 23 ] * q0 ) / 2 ;
nextP [ 2 ] [ 23 ] = P [ 2 ] [ 23 ] + P [ 0 ] [ 23 ] * SF [ 6 ] + P [ 1 ] [ 23 ] * SF [ 10 ] + P [ 3 ] [ 23 ] * SF [ 8 ] + P [ 12 ] [ 23 ] * SF [ 14 ] - P [ 10 ] [ 23 ] * SPP [ 10 ] - ( P [ 11 ] [ 23 ] * q0 ) / 2 ;
nextP [ 3 ] [ 23 ] = P [ 3 ] [ 23 ] + P [ 0 ] [ 23 ] * SF [ 7 ] + P [ 1 ] [ 23 ] * SF [ 6 ] + P [ 2 ] [ 23 ] * SF [ 9 ] + P [ 10 ] [ 23 ] * SF [ 15 ] - P [ 11 ] [ 23 ] * SF [ 14 ] - ( P [ 12 ] [ 23 ] * q0 ) / 2 ;
2016-04-27 23:05:54 -03:00
nextP [ 4 ] [ 23 ] = P [ 4 ] [ 23 ] + P [ 0 ] [ 23 ] * SF [ 5 ] + P [ 1 ] [ 23 ] * SF [ 3 ] - P [ 3 ] [ 23 ] * SF [ 4 ] + P [ 2 ] [ 23 ] * SPP [ 0 ] + P [ 13 ] [ 23 ] * SPP [ 3 ] + P [ 14 ] [ 23 ] * SPP [ 6 ] - P [ 15 ] [ 23 ] * SPP [ 9 ] ;
nextP [ 5 ] [ 23 ] = P [ 5 ] [ 23 ] + P [ 0 ] [ 23 ] * SF [ 4 ] + P [ 2 ] [ 23 ] * SF [ 3 ] + P [ 3 ] [ 23 ] * SF [ 5 ] - P [ 1 ] [ 23 ] * SPP [ 0 ] - P [ 13 ] [ 23 ] * SPP [ 8 ] + P [ 14 ] [ 23 ] * SPP [ 2 ] + P [ 15 ] [ 23 ] * SPP [ 5 ] ;
nextP [ 6 ] [ 23 ] = P [ 6 ] [ 23 ] + P [ 1 ] [ 23 ] * SF [ 4 ] - P [ 2 ] [ 23 ] * SF [ 5 ] + P [ 3 ] [ 23 ] * SF [ 3 ] + P [ 0 ] [ 23 ] * SPP [ 0 ] + P [ 13 ] [ 23 ] * SPP [ 4 ] - P [ 14 ] [ 23 ] * SPP [ 7 ] - P [ 15 ] [ 23 ] * SPP [ 1 ] ;
nextP [ 7 ] [ 23 ] = P [ 7 ] [ 23 ] + P [ 4 ] [ 23 ] * dt ;
nextP [ 8 ] [ 23 ] = P [ 8 ] [ 23 ] + P [ 5 ] [ 23 ] * dt ;
nextP [ 9 ] [ 23 ] = P [ 9 ] [ 23 ] + P [ 6 ] [ 23 ] * dt ;
2016-02-15 20:06:54 -04:00
nextP [ 10 ] [ 23 ] = P [ 10 ] [ 23 ] ;
nextP [ 11 ] [ 23 ] = P [ 11 ] [ 23 ] ;
nextP [ 12 ] [ 23 ] = P [ 12 ] [ 23 ] ;
nextP [ 13 ] [ 23 ] = P [ 13 ] [ 23 ] ;
nextP [ 14 ] [ 23 ] = P [ 14 ] [ 23 ] ;
nextP [ 15 ] [ 23 ] = P [ 15 ] [ 23 ] ;
nextP [ 16 ] [ 23 ] = P [ 16 ] [ 23 ] ;
nextP [ 17 ] [ 23 ] = P [ 17 ] [ 23 ] ;
nextP [ 18 ] [ 23 ] = P [ 18 ] [ 23 ] ;
nextP [ 19 ] [ 23 ] = P [ 19 ] [ 23 ] ;
nextP [ 20 ] [ 23 ] = P [ 20 ] [ 23 ] ;
nextP [ 21 ] [ 23 ] = P [ 21 ] [ 23 ] ;
nextP [ 22 ] [ 23 ] = P [ 22 ] [ 23 ] ;
nextP [ 23 ] [ 23 ] = P [ 23 ] [ 23 ] ;
2016-05-02 05:04:42 -03:00
// add process noise that is not from the IMU
for ( unsigned i = 22 ; i < = 23 ; i + + ) {
nextP [ i ] [ i ] + = process_noise [ i ] ;
}
2015-12-06 07:18:05 -04:00
2015-12-07 04:26:30 -04:00
}
// stop position covariance growth if our total position variance reaches 100m
2016-02-15 20:07:20 -04:00
// this can happen if we lose gps for some time
2016-04-27 23:05:54 -03:00
if ( ( P [ 7 ] [ 7 ] + P [ 8 ] [ 8 ] ) > 1e4 f ) {
for ( uint8_t i = 7 ; i < = 8 ; i + + ) {
2015-12-07 04:26:30 -04:00
for ( uint8_t j = 0 ; j < _k_num_states ; j + + ) {
nextP [ i ] [ j ] = P [ i ] [ j ] ;
nextP [ j ] [ i ] = P [ j ] [ i ] ;
}
}
}
// covariance matrix is symmetrical, so copy upper half to lower half
for ( unsigned row = 1 ; row < _k_num_states ; row + + ) {
for ( unsigned column = 0 ; column < row ; column + + ) {
2016-05-02 05:04:42 -03:00
P [ row ] [ column ] = P [ column ] [ row ] = nextP [ column ] [ row ] ;
2015-12-07 04:26:30 -04:00
}
}
2016-02-15 20:07:20 -04:00
// copy variances (diagonals)
2015-12-07 04:26:30 -04:00
for ( unsigned i = 0 ; i < _k_num_states ; i + + ) {
P [ i ] [ i ] = nextP [ i ] [ i ] ;
}
2016-05-07 07:29:50 -03:00
// fix gross errors in the covariance matrix and ensure rows and
// columns for un-used states are zero
fixCovarianceErrors ( ) ;
2015-12-07 04:26:30 -04:00
}
2015-12-06 07:18:05 -04:00
2016-05-07 07:29:50 -03:00
void Ekf : : fixCovarianceErrors ( )
2015-12-07 04:26:30 -04:00
{
2016-05-02 07:48:59 -03:00
// NOTE: This limiting is a last resort and should not be relied on
// TODO: Split covariance prediction into separate F*P*transpose(F) and Q contributions
// and set corresponding entries in Q to zero when states exceed 50% of the limit
2015-12-07 04:26:30 -04:00
// Covariance diagonal limits. Use same values for states which
// belong to the same group (e.g. vel_x, vel_y, vel_z)
2016-04-27 23:05:54 -03:00
float P_lim [ 8 ] = { } ;
P_lim [ 0 ] = 1.0f ; // quaternion max var
2016-05-02 07:48:59 -03:00
P_lim [ 1 ] = 1e6 f ; // velocity max var
P_lim [ 2 ] = 1e6 f ; // positiion max var
P_lim [ 3 ] = 1.0f ; // gyro bias max var
P_lim [ 4 ] = 1.0f ; // delta velocity z bias max var
P_lim [ 5 ] = 1.0f ; // earth mag field max var
P_lim [ 6 ] = 1.0f ; // body mag field max var
P_lim [ 7 ] = 1e6 f ; // wind max var
2015-12-07 04:26:30 -04:00
2016-04-27 23:05:54 -03:00
for ( int i = 0 ; i < = 3 ; i + + ) {
2016-05-07 07:29:50 -03:00
// quaternion states
2016-05-06 23:52:45 -03:00
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 0 ] ) ;
2015-12-07 04:26:30 -04:00
}
2015-12-06 07:18:05 -04:00
2016-04-27 23:05:54 -03:00
for ( int i = 4 ; i < = 6 ; i + + ) {
2016-05-07 07:29:50 -03:00
// NED velocity states
2016-05-06 23:52:45 -03:00
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 1 ] ) ;
2015-12-07 04:26:30 -04:00
}
2015-12-06 07:18:05 -04:00
2016-04-27 23:05:54 -03:00
for ( int i = 7 ; i < = 9 ; i + + ) {
2016-05-07 07:29:50 -03:00
// NED position states
2016-05-06 23:52:45 -03:00
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 2 ] ) ;
2015-12-07 04:26:30 -04:00
}
2015-12-06 07:18:05 -04:00
2016-04-27 23:05:54 -03:00
for ( int i = 10 ; i < = 12 ; i + + ) {
2016-05-07 07:29:50 -03:00
// gyro bias states
2016-05-06 23:52:45 -03:00
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 3 ] ) ;
2015-12-06 07:18:05 -04:00
}
2016-05-07 07:29:50 -03:00
// force symmetry on the quaternion, velocity and positon state covariances
makeSymmetrical ( P , 0 , 12 ) ;
2015-12-07 04:26:30 -04:00
2016-05-07 07:29:50 -03:00
// the following states are optional and are deactivaed when not required
// by ensuring the corresponding covariance matrix values are kept at zero
2015-12-07 04:26:30 -04:00
2016-05-07 07:29:50 -03:00
// accelerometer bias states
if ( ( _params . fusion_mode & MASK_INHIBIT_ACC_BIAS ) ) {
zeroRows ( P , 13 , 15 ) ;
zeroCols ( P , 13 , 15 ) ;
} else {
// constrain variances
for ( int i = 13 ; i < = 15 ; i + + ) {
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 4 ] ) ;
}
// force symmetry
makeSymmetrical ( P , 13 , 15 ) ;
2016-04-27 23:05:54 -03:00
}
2015-12-07 04:26:30 -04:00
2016-05-07 07:29:50 -03:00
// magnetic field states
if ( ! _control_status . flags . mag_3D ) {
zeroRows ( P , 16 , 21 ) ;
zeroCols ( P , 16 , 21 ) ;
} else {
// constrain variances
for ( int i = 16 ; i < = 18 ; i + + ) {
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 5 ] ) ;
}
for ( int i = 19 ; i < = 21 ; i + + ) {
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 6 ] ) ;
}
// force symmetry
makeSymmetrical ( P , 16 , 21 ) ;
2015-12-07 04:26:30 -04:00
}
2016-05-07 07:29:50 -03:00
// wind velocity states
if ( ! _control_status . flags . wind ) {
zeroRows ( P , 22 , 23 ) ;
zeroCols ( P , 22 , 23 ) ;
} else {
// constrain variances
for ( int i = 22 ; i < = 23 ; i + + ) {
P [ i ] [ i ] = math : : constrain ( P [ i ] [ i ] , 0.0f , P_lim [ 7 ] ) ;
}
// force symmetry
makeSymmetrical ( P , 22 , 23 ) ;
2015-12-07 04:26:30 -04:00
}
2015-12-06 07:18:05 -04:00
}