Skip to content

Commit 3088e83

Browse files
committed
hermitian for all covariance matrices
1 parent 05e4156 commit 3088e83

File tree

3 files changed

+19
-13
lines changed

3 files changed

+19
-13
lines changed

example/juMPC.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ setconstraint!(mpc, ŷmin=[-Inf,-Inf], ŷmax=[55, 35])
9595
setconstraint!(mpc, Δumin=[-Inf,-Inf],Δumax=[+Inf,+Inf])
9696

9797
function test_mpc(model, mpc)
98-
N = 20000
98+
N = 200
9999
u_data = zeros(2,N)
100100
y_data = zeros(2,N)
101101
r_data = zeros(2,N)
@@ -129,7 +129,7 @@ function test_mpc(model, mpc)
129129
return u_data, y_data, r_data, d_data
130130
end
131131

132-
@profview u_data, y_data, r_data, d_data = test_mpc(linModel4, mpc)
132+
u_data, y_data, r_data, d_data = test_mpc(linModel4, mpc)
133133
#profview u_data, y_data, r_data, d_data = test_mpc(linModel4, mpc)
134134
#=
135135
using PlotThemes, Plots

src/estimator/kalman.jl

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ struct SteadyKalmanFilter <: StateEstimator
1818
D̂dm ::Matrix{Float64}
1919
::Function
2020
::Function
21-
::Union{Diagonal{Float64, Vector{Float64}}, Matrix{Float64}}
22-
::Union{Diagonal{Float64, Vector{Float64}}, Matrix{Float64}}
21+
::Hermitian{Float64, Matrix{Float64}}
22+
::Hermitian{Float64, Matrix{Float64}}
2323
K::Matrix{Float64}
2424
function SteadyKalmanFilter(model, i_ym, nint_ym, Asm, Csm, Q̂, R̂)
2525
nx, ny = model.nx, model.ny
@@ -39,6 +39,8 @@ struct SteadyKalmanFilter <: StateEstimator
3939
"parameter or use the time-varying KalmanFilter.")
4040
end
4141
end
42+
= Hermitian(Q̂, :L)
43+
= Hermitian(R̂, :L)
4244
= [copy(model.x); zeros(nxs)]
4345
return new(
4446
model,
@@ -188,8 +190,8 @@ struct KalmanFilter <: StateEstimator
188190
::Function
189191
::Function
190192
P̂0::Hermitian{Float64, Matrix{Float64}}
191-
::Union{Diagonal{Float64, Vector{Float64}}, Matrix{Float64}}
192-
::Union{Diagonal{Float64, Vector{Float64}}, Matrix{Float64}}
193+
::Hermitian{Float64, Matrix{Float64}}
194+
::Hermitian{Float64, Matrix{Float64}}
193195
function KalmanFilter(model, i_ym, nint_ym, Asm, Csm, P̂0, Q̂, R̂)
194196
nx, ny = model.nx, model.ny
195197
nym, nyu = length(i_ym), ny - length(i_ym)
@@ -200,7 +202,9 @@ struct KalmanFilter <: StateEstimator
200202
f̂, ĥ, Â, B̂u, Ĉ, B̂d, D̂d = augment_model(model, As, Cs)
201203
Ĉm, D̂dm = Ĉ[i_ym, :], D̂d[i_ym, :] # measured outputs ym only
202204
= [copy(model.x); zeros(nxs)]
203-
P̂0 = Hermitian(P̂0)
205+
P̂0 = Hermitian(P̂0, :L)
206+
= Hermitian(Q̂, :L)
207+
= Hermitian(R̂, :L)
204208
= copy(P̂0)
205209
return new(
206210
model,
@@ -331,8 +335,8 @@ struct UnscentedKalmanFilter{M<:SimModel} <: StateEstimator
331335
::Function
332336
::Function
333337
P̂0::Hermitian{Float64, Matrix{Float64}}
334-
::Union{Diagonal{Float64, Vector{Float64}}, Hermitian{Float64, Matrix{Float64}}}
335-
::Union{Diagonal{Float64, Vector{Float64}}, Hermitian{Float64, Matrix{Float64}}}
338+
::Hermitian{Float64, Matrix{Float64}}
339+
::Hermitian{Float64, Matrix{Float64}}
336340
::Int
337341
γ::Float64
338342
::Vector{Float64}
@@ -349,7 +353,9 @@ struct UnscentedKalmanFilter{M<:SimModel} <: StateEstimator
349353
f̂, ĥ = augment_model(model, As, Cs)
350354
nσ, γ, m̂, Ŝ = init_ukf(nx̂, α, β, κ)
351355
= [copy(model.x); zeros(nxs)]
352-
P̂0 = Hermitian(P̂0)
356+
P̂0 = Hermitian(P̂0, :L)
357+
= Hermitian(Q̂, :L)
358+
= Hermitian(R̂, :L)
353359
= copy(P̂0)
354360
return new(
355361
model,

src/predictive_control.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ struct LinMPC{S<:StateEstimator} <: PredictiveController
7979
model = estim.model
8080
nu, ny = model.nu, model.ny
8181
validate_weights(model, Hp, Hc, Mwt, Nwt, Lwt, Cwt, ru)
82-
M_Hp = Diagonal(convert(Vector{Float64}, repeat(Mwt, Hp)))
83-
N_Hc = Diagonal(convert(Vector{Float64}, repeat(Nwt, Hc)))
84-
L_Hp = Diagonal(convert(Vector{Float64}, repeat(Lwt, Hp)))
82+
M_Hp = Diagonal{Float64}(repeat(Mwt, Hp))
83+
N_Hc = Diagonal{Float64}(repeat(Nwt, Hc))
84+
L_Hp = Diagonal{Float64}(repeat(Lwt, Hp))
8585
C = Cwt
8686
# manipulated input setpoint predictions are constant over Hp :
8787
R̂u = ~iszero(Lwt) ? repeat(ru, Hp) : R̂u = Float64[]

0 commit comments

Comments
 (0)