@ -206,7 +206,6 @@ void NavEKF3_core::InitialiseVariables()
@@ -206,7 +206,6 @@ void NavEKF3_core::InitialiseVariables()
prevTnb . zero ( ) ;
memset ( & P [ 0 ] [ 0 ] , 0 , sizeof ( P ) ) ;
memset ( & nextP [ 0 ] [ 0 ] , 0 , sizeof ( nextP ) ) ;
memset ( & processNoise [ 0 ] , 0 , sizeof ( processNoise ) ) ;
flowDataValid = false ;
rangeDataToFuse = false ;
fuseOptFlowData = false ;
@ -822,17 +821,12 @@ void NavEKF3_core::calcOutputStates()
@@ -822,17 +821,12 @@ void NavEKF3_core::calcOutputStates()
void NavEKF3_core : : CovariancePrediction ( )
{
hal . util - > perf_begin ( _perf_CovariancePrediction ) ;
float windVelSigma ; // wind velocity 1-sigma process noise - m/s
float dAngBiasSigma ; // delta angle bias 1-sigma process noise - rad/s
float dVelBiasSigma ; // delta velocity bias 1-sigma process noise - m/s
float magEarthSigma ; // earth magnetic field 1-sigma process noise
float magBodySigma ; // body magnetic field 1-sigma process noise
float daxVar ; // X axis delta angle noise variance rad^2
float dayVar ; // Y axis delta angle noise variance rad^2
float dazVar ; // Z axis delta angle noise variance rad^2
float dvxVar ; // X axis delta velocity variance noise (m/s)^2
float dvyVar ; // Y axis delta velocity variance noise (m/s)^2
float dvzVar ; // Z axis delta velocity variance noise (m/s)^2
float daxVar ; // X axis delta angle noise variance rad^2
float dayVar ; // Y axis delta angle noise variance rad^2
float dazVar ; // Z axis delta angle noise variance rad^2
float dvxVar ; // X axis delta velocity variance noise (m/s)^2
float dvyVar ; // Y axis delta velocity variance noise (m/s)^2
float dvzVar ; // Z axis delta velocity variance noise (m/s)^2
float dvx ; // X axis delta velocity (m/s)
float dvy ; // Y axis delta velocity (m/s)
float dvz ; // Z axis delta velocity (m/s)
@ -859,25 +853,34 @@ void NavEKF3_core::CovariancePrediction()
@@ -859,25 +853,34 @@ void NavEKF3_core::CovariancePrediction()
float alpha = 0.1f * dt ;
hgtRate = hgtRate * ( 1.0f - alpha ) - stateStruct . velocity . z * alpha ;
// calculate covariance prediction process noise
windVelSigma = dt * constrain_float ( frontend - > _windVelProcessNoise , 0.0f , 1.0f ) * ( 1.0f + constrain_float ( frontend - > _wndVarHgtRateScale , 0.0f , 1.0f ) * fabsf ( hgtRate ) ) ;
dAngBiasSigma = sq ( dt ) * constrain_float ( frontend - > _gyroBiasProcessNoise , 0.0f , 1.0f ) ;
dVelBiasSigma = sq ( dt ) * constrain_float ( frontend - > _accelBiasProcessNoise , 0.0f , 1.0f ) ;
magEarthSigma = dt * constrain_float ( frontend - > _magEarthProcessNoise , 0.0f , 1.0f ) ;
magBodySigma = dt * constrain_float ( frontend - > _magBodyProcessNoise , 0.0f , 1.0f ) ;
for ( uint8_t i = 0 ; i < = 9 ; i + + ) processNoise [ i ] = 0.0f ;
for ( uint8_t i = 10 ; i < = 12 ; i + + ) processNoise [ i ] = dAngBiasSigma ;
for ( uint8_t i = 13 ; i < = 15 ; i + + ) processNoise [ i ] = dVelBiasSigma ;
if ( expectGndEffectTakeoff ) {
processNoise [ 15 ] = 0.0f ;
} else {
processNoise [ 15 ] = dVelBiasSigma ;
// calculate covariance prediction process noise added to diagonals of predicted covariance matrix
// error growth of first 10 kinematic states is built into auto-code for covariance prediction and driven by IMU noise parameters
Vector14 processNoiseVariance = { } ;
if ( ! inhibitDelAngBiasStates ) {
float dAngBiasVar = sq ( sq ( dt ) * constrain_float ( frontend - > _gyroBiasProcessNoise , 0.0f , 1.0f ) ) ;
for ( uint8_t i = 0 ; i < = 2 ; i + + ) processNoiseVariance [ i ] = dAngBiasVar ;
}
if ( ! inhibitDelVelBiasStates ) {
float dVelBiasVar = sq ( sq ( dt ) * constrain_float ( frontend - > _accelBiasProcessNoise , 0.0f , 1.0f ) ) ;
for ( uint8_t i = 3 ; i < = 4 ; i + + ) processNoiseVariance [ i ] = dVelBiasVar ;
if ( ! expectGndEffectTakeoff ) {
processNoiseVariance [ 5 ] = dVelBiasVar ;
}
}
if ( ! inhibitMagStates ) {
float magEarthVar = sq ( dt * constrain_float ( frontend - > _magEarthProcessNoise , 0.0f , 1.0f ) ) ;
float magBodyVar = sq ( dt * constrain_float ( frontend - > _magBodyProcessNoise , 0.0f , 1.0f ) ) ;
for ( uint8_t i = 6 ; i < = 8 ; i + + ) processNoiseVariance [ i ] = magEarthVar ;
for ( uint8_t i = 9 ; i < = 11 ; i + + ) processNoiseVariance [ i ] = magBodyVar ;
}
for ( uint8_t i = 16 ; i < = 18 ; i + + ) processNoise [ i ] = magEarthSigma ;
for ( uint8_t i = 19 ; i < = 21 ; i + + ) processNoise [ i ] = magBodySigma ;
for ( uint8_t i = 22 ; i < = 23 ; i + + ) processNoise [ i ] = windVelSigma ;
for ( uint8_t i = 0 ; i < = stateIndexLim ; i + + ) processNoise [ i ] = sq ( processNoise [ i ] ) ;
if ( ! inhibitWindStates ) {
float windVelVar = sq ( dt * constrain_float ( frontend - > _windVelProcessNoise , 0.0f , 1.0f ) * ( 1.0f + constrain_float ( frontend - > _wndVarHgtRateScale , 0.0f , 1.0f ) * fabsf ( hgtRate ) ) ) ;
for ( uint8_t i = 12 ; i < = 13 ; i + + ) processNoiseVariance [ i ] = windVelVar ;
}
// set variables used to calculate covariance growth
dvx = imuDataDelayed . delVel . x ;
@ -958,26 +961,6 @@ void NavEKF3_core::CovariancePrediction()
@@ -958,26 +961,6 @@ void NavEKF3_core::CovariancePrediction()
SPP [ 9 ] = 2.0f * q0 * q2 + 2.0f * q1 * q3 ;
SPP [ 10 ] = SF [ 16 ] ;
if ( inhibitDelAngBiasStates ) {
zeroRows ( P , 10 , 12 ) ;
zeroCols ( P , 10 , 12 ) ;
}
if ( inhibitDelVelBiasStates ) {
zeroRows ( P , 13 , 15 ) ;
zeroCols ( P , 13 , 15 ) ;
}
if ( inhibitMagStates ) {
zeroRows ( P , 16 , 21 ) ;
zeroCols ( P , 16 , 21 ) ;
}
if ( inhibitWindStates ) {
zeroRows ( P , 22 , 23 ) ;
zeroCols ( P , 22 , 23 ) ;
}
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 ] ) * 0.25f + 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 ) ) * 0.25f + ( dazVar * sq ( q3 ) ) * 0.25f ;
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 ] ) ) * 0.5f ;
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 ) * 0.5f + 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 ) ) * 0.25f + ( dazVar * sq ( q2 ) ) * 0.25f - ( 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 ) ) * 0.5f ;
@ -1033,279 +1016,276 @@ void NavEKF3_core::CovariancePrediction()
@@ -1033,279 +1016,276 @@ void NavEKF3_core::CovariancePrediction()
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
nextP [ 10 ] [ 10 ] = P [ 10 ] [ 10 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
nextP [ 10 ] [ 11 ] = P [ 10 ] [ 11 ] ;
nextP [ 11 ] [ 11 ] = P [ 11 ] [ 11 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
nextP [ 10 ] [ 12 ] = P [ 10 ] [ 12 ] ;
nextP [ 11 ] [ 12 ] = P [ 11 ] [ 12 ] ;
nextP [ 12 ] [ 12 ] = P [ 12 ] [ 12 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ] ;
if ( stateIndexLim > 15 ) {
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
if ( stateIndexLim > 21 ) {
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
}
}
// Copy upper diagonal to lower diagonal taking advantage of symmetry
for ( uint8_t colIndex = 0 ; colIndex < = stateIndexLim ; colIndex + + )
{
for ( uint8_t rowIndex = 0 ; rowIndex < colIndex ; rowIndex + + )
{
nextP [ colIndex ] [ rowIndex ] = nextP [ rowIndex ] [ colIndex ] ;
if ( stateIndexLim > 9 ) {
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
nextP [ 10 ] [ 10 ] = P [ 10 ] [ 10 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
nextP [ 10 ] [ 11 ] = P [ 10 ] [ 11 ] ;
nextP [ 11 ] [ 11 ] = P [ 11 ] [ 11 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
nextP [ 10 ] [ 12 ] = P [ 10 ] [ 12 ] ;
nextP [ 11 ] [ 12 ] = P [ 11 ] [ 12 ] ;
nextP [ 12 ] [ 12 ] = P [ 12 ] [ 12 ] ;
if ( stateIndexLim > 12 ) {
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ] ;
if ( stateIndexLim > 15 ) {
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
if ( stateIndexLim > 21 ) {
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
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 ] ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ) * 0.5f ;
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 ;
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 ] ;
}
}
}
}
// add the general state process noise variances
for ( uint8_t i = 0 ; i < = stateIndexLim ; i + + )
{
nextP [ i ] [ i ] = nextP [ i ] [ i ] + processNoise [ i ] ;
if ( stateIndexLim > 9 ) {
for ( uint8_t i = 10 ; i < = stateIndexLim ; i + + ) {
nextP [ i ] [ i ] = nextP [ i ] [ i ] + processNoiseVariance [ i - 10 ] ;
}
}
// if the total position variance exceeds 1e4 (100m), then stop covariance
// growth by setting the predicted to the previous values
// This prevent an ill conditioned matrix from occurring for long periods
// without GPS
if ( ( P [ 7 ] [ 7 ] + P [ 8 ] [ 8 ] ) > 1e4 f )
{
if ( ( P [ 7 ] [ 7 ] + P [ 8 ] [ 8 ] ) > 1e4 f ) {
for ( uint8_t i = 7 ; i < = 8 ; i + + )
{
for ( uint8_t j = 0 ; j < = stateIndexLim ; j + + )
@ -1316,10 +1296,18 @@ void NavEKF3_core::CovariancePrediction()
@@ -1316,10 +1296,18 @@ void NavEKF3_core::CovariancePrediction()
}
}
// copy covariances to output
CopyCovariances ( ) ;
// covariance matrix is symmetrical, so copy diagonals and copy lower half in nextP
// to lower and upper half in P
for ( uint8_t row = 0 ; row < = stateIndexLim ; row + + ) {
// copy diagonals
P [ row ] [ row ] = nextP [ row ] [ row ] ;
// copy off diagonals
for ( uint8_t column = 0 ; column < row ; column + + ) {
P [ row ] [ column ] = P [ column ] [ row ] = nextP [ column ] [ row ] ;
}
}
// constrain diagonals to prevent ill-conditioning
// constrain value s to prevent ill-conditioning
ConstrainVariances ( ) ;
hal . util - > perf_end ( _perf_CovariancePrediction ) ;
@ -1404,30 +1392,43 @@ void NavEKF3_core::ForceSymmetry()
@@ -1404,30 +1392,43 @@ void NavEKF3_core::ForceSymmetry()
}
}
// copy covariances across from covariance prediction calculation
void NavEKF3_core : : CopyCovariances ( )
{
// copy predicted covariances
for ( uint8_t i = 0 ; i < = stateIndexLim ; i + + ) {
for ( uint8_t j = 0 ; j < = stateIndexLim ; j + + )
{
P [ i ] [ j ] = nextP [ i ] [ j ] ;
}
}
}
// constrain variances (diagonal terms) in the state covariance matrix to prevent ill-conditioning
// if states are inactive, zero the corresponding off-diagonals
void NavEKF3_core : : ConstrainVariances ( )
{
for ( uint8_t i = 0 ; i < = 3 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 1.0f ) ; // attitude error
for ( uint8_t i = 4 ; i < = 6 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 1.0e3 f ) ; // velocities
for ( uint8_t i = 7 ; i < = 8 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 1.0e6 f ) ;
P [ 9 ] [ 9 ] = constrain_float ( P [ 9 ] [ 9 ] , 0.0f , 1.0e6 f ) ; // vertical position
for ( uint8_t i = 10 ; i < = 12 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , sq ( 0.175f * dtEkfAvg ) ) ; // delta angle biases
for ( uint8_t i = 13 ; i < = 15 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , sq ( 10.0f * dtEkfAvg ) ) ; // delta velocity bias
for ( uint8_t i = 16 ; i < = 18 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 0.01f ) ; // earth magnetic field
for ( uint8_t i = 19 ; i < = 21 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 0.01f ) ; // body magnetic field
for ( uint8_t i = 22 ; i < = 23 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 1.0e3 f ) ; // wind velocity
if ( ! inhibitDelAngBiasStates ) {
for ( uint8_t i = 10 ; i < = 12 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , sq ( 0.175f * dtEkfAvg ) ) ;
} else {
zeroCols ( P , 10 , 12 ) ;
zeroRows ( P , 10 , 12 ) ;
}
if ( ! inhibitDelVelBiasStates ) {
for ( uint8_t i = 13 ; i < = 15 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , sq ( 10.0f * dtEkfAvg ) ) ;
} else {
zeroCols ( P , 13 , 15 ) ;
zeroRows ( P , 13 , 15 ) ;
}
if ( ! inhibitMagStates ) {
for ( uint8_t i = 16 ; i < = 18 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 0.01f ) ; // earth magnetic field
for ( uint8_t i = 19 ; i < = 21 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 0.01f ) ; // body magnetic field
} else {
zeroCols ( P , 16 , 21 ) ;
zeroRows ( P , 16 , 21 ) ;
}
if ( ! inhibitWindStates ) {
for ( uint8_t i = 22 ; i < = 23 ; i + + ) P [ i ] [ i ] = constrain_float ( P [ i ] [ i ] , 0.0f , 1.0e3 f ) ;
} else {
zeroCols ( P , 22 , 23 ) ;
zeroRows ( P , 22 , 23 ) ;
}
}
// constrain states to prevent ill-conditioning