Skip to content

Commit d091191

Browse files
committed
replaced abstract Diagonal and Hermitian fields to concrete types
1 parent d65a404 commit d091191

File tree

2 files changed

+23
-21
lines changed

2 files changed

+23
-21
lines changed

src/estimator/kalman.jl

Lines changed: 15 additions & 13 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}, Matrix{Float64}}
22-
::Union{Diagonal{Float64}, Matrix{Float64}}
21+
::Union{Diagonal{Float64, Vector{Float64}}, Matrix{Float64}}
22+
::Union{Diagonal{Float64, Vector{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
@@ -169,7 +169,7 @@ end
169169
struct KalmanFilter <: StateEstimator
170170
model::LinModel
171171
::Vector{Float64}
172-
::Hermitian{Float64}
172+
::Hermitian{Float64, Matrix{Float64}}
173173
i_ym::IntRangeOrVector
174174
nx̂::Int
175175
nym::Int
@@ -187,9 +187,9 @@ struct KalmanFilter <: StateEstimator
187187
D̂dm ::Matrix{Float64}
188188
::Function
189189
::Function
190-
P̂0::Union{Diagonal{Float64}, Hermitian{Float64}}
191-
::Union{Diagonal{Float64}, Matrix{Float64}}
192-
::Union{Diagonal{Float64}, Matrix{Float64}}
190+
P̂0::Hermitian{Float64, Matrix{Float64}}
191+
::Union{Diagonal{Float64, Vector{Float64}}, Matrix{Float64}}
192+
::Union{Diagonal{Float64, Vector{Float64}}, Matrix{Float64}}
193193
function KalmanFilter(model, i_ym, nint_ym, Asm, Csm, P̂0, Q̂, R̂)
194194
nx, ny = model.nx, model.ny
195195
nym, nyu = length(i_ym), ny - length(i_ym)
@@ -200,7 +200,8 @@ struct KalmanFilter <: StateEstimator
200200
f̂, ĥ, Â, B̂u, Ĉ, B̂d, D̂d = augment_model(model, As, Cs)
201201
Ĉm, D̂dm = Ĉ[i_ym, :], D̂d[i_ym, :] # measured outputs ym only
202202
= [copy(model.x); zeros(nxs)]
203-
= Hermitian(Matrix(P̂0), :L)
203+
P̂0 = Hermitian(P̂0)
204+
= copy(P̂0)
204205
return new(
205206
model,
206207
x̂, P̂,
@@ -318,7 +319,7 @@ end
318319
struct UnscentedKalmanFilter{M<:SimModel} <: StateEstimator
319320
model::M
320321
::Vector{Float64}
321-
::Hermitian{Float64}
322+
::Hermitian{Float64, Matrix{Float64}}
322323
i_ym::IntRangeOrVector
323324
nx̂::Int
324325
nym::Int
@@ -329,13 +330,13 @@ struct UnscentedKalmanFilter{M<:SimModel} <: StateEstimator
329330
nint_ym::Vector{Int}
330331
::Function
331332
::Function
332-
P̂0::Union{Diagonal{Float64}, Hermitian{Float64}}
333-
::Union{Diagonal{Float64}, Matrix{Float64}}
334-
::Union{Diagonal{Float64}, Matrix{Float64}}
333+
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}}}
335336
::Int
336337
γ::Float64
337338
::Vector{Float64}
338-
::Diagonal{Float64}
339+
::Diagonal{Float64, Vector{Float64}}
339340
function UnscentedKalmanFilter{M}(
340341
model::M, i_ym, nint_ym, Asm, Csm, P̂0, Q̂, R̂, α, β, κ
341342
) where {M<:SimModel}
@@ -348,7 +349,8 @@ struct UnscentedKalmanFilter{M<:SimModel} <: StateEstimator
348349
f̂, ĥ = augment_model(model, As, Cs)
349350
nσ, γ, m̂, Ŝ = init_ukf(nx̂, α, β, κ)
350351
= [copy(model.x); zeros(nxs)]
351-
= Hermitian(Matrix(P̂0), :L)
352+
P̂0 = Hermitian(P̂0)
353+
= copy(P̂0)
352354
return new(
353355
model,
354356
x̂, P̂,

src/predictive_control.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ struct LinMPC{S<:StateEstimator} <: PredictiveController
3838
info::OptimInfo
3939
Hp::Int
4040
Hc::Int
41-
M_Hp::Diagonal{Float64}
42-
Ñ_Hc::Diagonal{Float64}
43-
L_Hp::Diagonal{Float64}
41+
M_Hp::Diagonal{Float64, Vector{Float64}}
42+
Ñ_Hc::Diagonal{Float64, Vector{Float64}}
43+
L_Hp::Diagonal{Float64, Vector{Float64}}
4444
C::Float64
4545
R̂u::Vector{Float64}
4646
Umin ::Vector{Float64}
@@ -70,7 +70,7 @@ struct LinMPC{S<:StateEstimator} <: PredictiveController
7070
J ::Matrix{Float64}
7171
Kd::Matrix{Float64}
7272
Q ::Matrix{Float64}
73-
::Symmetric{Float64}
73+
::Hermitian{Float64, Matrix{Float64}}
7474
Ks::Matrix{Float64}
7575
Ps::Matrix{Float64}
7676
Yop::Vector{Float64}
@@ -269,9 +269,9 @@ struct NonLinMPC{S<:StateEstimator} <: PredictiveController
269269
info::OptimInfo
270270
Hp::Int
271271
Hc::Int
272-
M_Hp::Diagonal{Float64}
273-
Ñ_Hc::Diagonal{Float64}
274-
L_Hp::Diagonal{Float64}
272+
M_Hp::Diagonal{Float64, Vector{Float64}}
273+
Ñ_Hc::Diagonal{Float64, Vector{Float64}}
274+
L_Hp::Diagonal{Float64, Vector{Float64}}
275275
C::Float64
276276
E::Float64
277277
R̂u::Vector{Float64}
@@ -1136,7 +1136,7 @@ vector ``\mathbf{q̃}`` and scalar ``p`` need recalculation each control period
11361136
[`init_prediction`](@ref) method). ``p`` does not impact the minima position. It is thus
11371137
useless at optimization but required to evaluate the minimal ``J`` value.
11381138
"""
1139-
init_quadprog(Ẽ, S_Hp, M_Hp, N_Hc, L_Hp) = 2*Symmetric(Ẽ'*M_Hp*+ N_Hc + S_Hp'*L_Hp*S_Hp)
1139+
init_quadprog(Ẽ, S_Hp, M_Hp, N_Hc, L_Hp) = 2*Hermitian(Ẽ'*M_Hp*+ N_Hc + S_Hp'*L_Hp*S_Hp)
11401140

11411141
"Return the quadratic programming objective function, see [`init_quadprog`](@ref)."
11421142
obj_quadprog(ΔŨ, P̃, q̃) = 1/2*ΔŨ'**ΔŨ +'*ΔŨ

0 commit comments

Comments
 (0)