Skip to content

Commit 82ff7ec

Browse files
add try catch blocks in update_llk!
1 parent 77fd677 commit 82ff7ec

File tree

5 files changed

+35
-26
lines changed

5 files changed

+35
-26
lines changed

src/filters/multivariate_kalman_filter.jl

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,14 @@ function update_P!(
187187
end
188188

189189
function update_llk!(kalman_state::MultivariateKalmanState{Fl}) where Fl
190-
detF = det(kalman_state.F)
191-
if detF < 0
192-
error("Numerical error, the determinant of F $(kalman_state.F) is negative: $detF")
193-
else
194-
kalman_state.llk -=
195-
HALF_LOG_2_PI + 0.5 * (log(detF) +
190+
try
191+
kalman_state.llk -= (
192+
HALF_LOG_2_PI + 0.5 * (logdet(kalman_state.F) +
196193
kalman_state.v' * inv(kalman_state.F) * kalman_state.v)
194+
)
195+
catch
196+
@error("Numerical error in the log-likelihood calculation. F = $(kalman_state.F), v = $(kalman_state.v). det(F) can only be positive.")
197+
rethrow()
197198
end
198199
return kalman_state
199200
end

src/filters/regression_kalman_filter.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,14 @@ function regression_update_v!(
5858
end
5959

6060
function update_llk!(kalman_state::RegressionKalmanState{Fl}) where Fl
61-
if kalman_state.F < 0
62-
error("Numerical error, F is negative: $(kalman_state.F)")
61+
try
62+
kalman_state.llk -= (
63+
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
64+
)
65+
catch
66+
@error("Numerical error in the log-likelihood calculation. F = $(kalman_state.F), v = $(kalman_state.v). F can only be positive.")
67+
rethrow()
6368
end
64-
kalman_state.llk -= (
65-
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
66-
)
6769
return kalman_state
6870
end
6971

src/filters/scalar_kalman_filter.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,14 @@ function scalar_update_P!(kalman_state::ScalarKalmanState{Fl}, T::Fl, RQR::Fl) w
125125
end
126126

127127
function update_llk!(kalman_state::ScalarKalmanState{Fl}) where Fl
128-
if kalman_state.F < 0
129-
error("Numerical error, F is negative: $(kalman_state.F)")
128+
try
129+
kalman_state.llk -= (
130+
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
131+
)
132+
catch
133+
@error("Numerical error in the log-likelihood calculation. F = $(kalman_state.F), v = $(kalman_state.v). F can only be positive.")
134+
rethrow()
130135
end
131-
kalman_state.llk -= (
132-
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
133-
)
134136
return kalman_state
135137
end
136138

src/filters/sparse_univariate_kalman_filter.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,14 @@ function update_P!(
179179
end
180180

181181
function update_llk!(kalman_state::SparseUnivariateKalmanState{Fl}) where Fl
182-
if kalman_state.F < 0
183-
error("Numerical error, F is negative: $(kalman_state.F)")
182+
try
183+
kalman_state.llk -= (
184+
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
185+
)
186+
catch
187+
@error("Numerical error in the log-likelihood calculation. F = $(kalman_state.F), v = $(kalman_state.v). F can only be positive.")
188+
rethrow()
184189
end
185-
kalman_state.llk -= (
186-
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
187-
)
188190
return kalman_state
189191
end
190192

src/filters/univariate_kalman_filter.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,12 +195,14 @@ function update_P!(
195195
end
196196

197197
function update_llk!(kalman_state::UnivariateKalmanState{Fl}) where Fl
198-
if kalman_state.F < 0
199-
error("Numerical error, F is negative: $(kalman_state.F)")
198+
try
199+
kalman_state.llk -= (
200+
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
201+
)
202+
catch
203+
@error("Numerical error in the log-likelihood calculation. F = $(kalman_state.F), v = $(kalman_state.v). F can only be positive.")
204+
rethrow()
200205
end
201-
kalman_state.llk -= (
202-
HALF_LOG_2_PI + 0.5 * (log(kalman_state.F) + kalman_state.v^2 / kalman_state.F)
203-
)
204206
return kalman_state
205207
end
206208

0 commit comments

Comments
 (0)