def test_parameter_learning_in_linear_case(self): is_f_linear = True is_g_linear = True for j, (state_dim, output_dim) in enumerate(zip([1], [1])): # tester différentes tailles for k, n_sample in enumerate([100]): ssm = StateSpaceModel(is_f_linear=is_f_linear, is_g_linear=is_g_linear, state_dim=state_dim, output_dim=output_dim) ssm.draw_sample(T=n_sample) is_extended = False ssm.kalman_smoothing(is_extended=is_extended) ssm.compute_f_optimal_parameters() ssm.compute_g_optimal_parameters()
def test_linear_kalman_methods(self): for i, (state_dim, output_dim, input_dim) in enumerate(zip([1, 4, 3], [1, 3, 4], [0, 0, 0])): # tester différentes tailles for j, T in enumerate([1, 10]): default_message = 'Parameters : T = ' + str( T) + '. state_dim = ' + str( state_dim) + '. output_dim = ' + str( output_dim) + '. input_dim = ' + str(input_dim) ssm = StateSpaceModel(is_f_linear=True, is_g_linear=True, state_dim=state_dim, output_dim=output_dim, input_dim=input_dim) ssm.draw_sample(T=T) ssm.kalman_smoothing(is_extended=False) self.assertEqual(len(getattr(ssm, 'filtered_state_means')), T) self.assertEqual( len(getattr(ssm, 'filtered_state_covariance')), T) self.assertEqual(len(getattr(ssm, 'smoothed_state_means')), T) self.assertEqual( len(getattr(ssm, 'smoothed_state_covariance')), T) # verifier que les moyennes et covariances estimmées ont les bonnes dimensions for i in range(0, T): xFilter0 = ssm.filtered_state_means[i][0] xFilter1 = ssm.filtered_state_means[i][1] PFilter0 = ssm.filtered_state_covariance[i][0] PFilter1 = ssm.filtered_state_covariance[i][1] xSmooth = ssm.smoothed_state_means[i] PSmooth = ssm.smoothed_state_covariance[T - 1 - i] self.assertEqual( xFilter0.size, ssm.state_dim, 'mean vector must have state_dim dimension') self.assertEqual( xFilter1.size, ssm.state_dim, 'mean vector must have state_dim dimension') self.assertEqual( PFilter0.shape, (ssm.state_dim, ssm.state_dim), 'cov matrix must have state_dim dimension') self.assertEqual( PFilter1.shape, (ssm.state_dim, ssm.state_dim), 'cov matrix must have state_dim dimension') # check that matrices are definite positive self.assertTrue( utils.is_pos_def(PFilter0), 'filtered covariance matrix must be positive definite') self.assertTrue( utils.is_pos_def(PFilter1), 'filtered covariance matrix must be positive definite') self.assertEqual( xSmooth.size, ssm.state_dim, 'mean vector must have state_dim dimension') self.assertEqual( PSmooth.shape, (ssm.state_dim, ssm.state_dim), 'cov matrix must have state_dim dimension') self.assertTrue( utils.is_pos_def(PSmooth), default_message + '. Smoothed covariance P_{T-' + str(i) + '} matrix must be positive definite')