Properly terminate nonlinear_kalman_filter if non-positive definite matrices are encountered
Otherwise, crashes can happen during mode-findingrm-particles^2
parent
285d5c1711
commit
ddc5b5b665
|
@ -152,8 +152,18 @@ for t=1:sample_size
|
||||||
KalmanFilterGain = PredictedStateAndObservedCovariance/PredictedObservedVariance;
|
KalmanFilterGain = PredictedStateAndObservedCovariance/PredictedObservedVariance;
|
||||||
StateVectorMean = PredictedStateMean + KalmanFilterGain*PredictionError;
|
StateVectorMean = PredictedStateMean + KalmanFilterGain*PredictionError;
|
||||||
StateVectorVariance = PredictedStateVariance - KalmanFilterGain*PredictedObservedVariance*KalmanFilterGain';
|
StateVectorVariance = PredictedStateVariance - KalmanFilterGain*PredictedObservedVariance*KalmanFilterGain';
|
||||||
StateVectorVarianceSquareRoot = chol(StateVectorVariance)';
|
[StateVectorVarianceSquareRoot, p]= chol(StateVectorVariance,'lower');
|
||||||
PredictedObservedVarianceSquareRoot = chol(PredictedObservedVariance)' ;
|
if p
|
||||||
|
LIK=-Inf;
|
||||||
|
lik(t)=-Inf;
|
||||||
|
return
|
||||||
|
end
|
||||||
|
[PredictedObservedVarianceSquareRoot, p]= chol(PredictedObservedVariance,'lower');
|
||||||
|
if p
|
||||||
|
LIK=-Inf;
|
||||||
|
lik(t)=-Inf;
|
||||||
|
return
|
||||||
|
end
|
||||||
end
|
end
|
||||||
lik(t) = log( probability2(0,PredictedObservedVarianceSquareRoot,PredictionError) ) ;
|
lik(t) = log( probability2(0,PredictedObservedVarianceSquareRoot,PredictionError) ) ;
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue