Skip to content

Commit 38cd87b

Browse files
committed
debug setmodel! for MPCs
1 parent de25b56 commit 38cd87b

File tree

2 files changed

+13
-9
lines changed

2 files changed

+13
-9
lines changed

src/controller/execute.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -556,13 +556,13 @@ prediction horizon ``H_p``.
556556
```jldoctest
557557
julia> mpc = LinMPC(KalmanFilter(LinModel(ss(0.1, 0.5, 1, 0, 4.0)), σR=[√25]), Hp=1, Hc=1);
558558
559-
julia> mpc.estim.model.A[], mpc.estim.R̂[], mpc.M_Hp[]
560-
(0.1, 25.0, 1.0)
559+
julia> mpc.estim.model.A[1], mpc.estim.R̂[1], mpc.M_Hp[1], mpc.Ñ_Hc[1]
560+
(0.1, 25.0, 1.0, 0.1)
561561
562-
julia> setmodel!(mpc, LinModel(ss(0.42, 0.5, 1, 0, 4.0)); R̂=[9], M_Hp=[0]);
562+
julia> setmodel!(mpc, LinModel(ss(0.42, 0.5, 1, 0, 4.0)); R̂=[9], M_Hp=[10], Nwt=[0.666]);
563563
564-
julia> mpc.estim.model.A[], mpc.estim.R̂[], mpc.M_Hp[]
565-
(0.42, 9.0, 0.0)
564+
julia> mpc.estim.model.A[1], mpc.estim.R̂[1], mpc.M_Hp[1], mpc.Ñ_Hc[1]
565+
(0.42, 9.0, 10.0, 0.666)
566566
```
567567
"""
568568
function setmodel!(
@@ -587,9 +587,10 @@ function setmodel!(
587587
mpc.M_Hp[i, i] = Mwt[(i-1) % ny + 1]
588588
end
589589
elseif !isnothing(M_Hp)
590+
M_Hp = to_hermitian(M_Hp)
590591
nŶ = ny*Hp
591592
size(M_Hp) == (nŶ, nŶ) || throw(ArgumentError("M_Hp size should be ($nŶ, $nŶ)"))
592-
mpc.M_Hp .= to_hermitian(M_Hp)
593+
mpc.M_Hp .= M_Hp
593594
end
594595
if isnothing(Ñ_Hc) && !isnothing(Nwt)
595596
size(Nwt) == (nu,) || throw(ArgumentError("Nwt should be a vector of length $nu"))
@@ -598,9 +599,10 @@ function setmodel!(
598599
mpc.Ñ_Hc[i, i] = Nwt[(i-1) % nu + 1]
599600
end
600601
elseif !isnothing(Ñ_Hc)
602+
Ñ_Hc = to_hermitian(Ñ_Hc)
601603
nΔŨ = nu*Hc+
602604
size(Ñ_Hc) == (nΔŨ, nΔŨ) || throw(ArgumentError("Ñ_Hc size should be ($nΔŨ, $nΔŨ)"))
603-
mpc.Ñ_Hc .= to_hermitian(Ñ_Hc)
605+
mpc.Ñ_Hc .= Ñ_Hc
604606
end
605607
if isnothing(L_Hp) && !isnothing(Lwt)
606608
size(Lwt) == (nu,) || throw(ArgumentError("Lwt should be a vector of length $nu"))
@@ -609,9 +611,10 @@ function setmodel!(
609611
mpc.L_Hp[i, i] = Lwt[(i-1) % nu + 1]
610612
end
611613
elseif !isnothing(L_Hp)
614+
L_Hp = to_hermitian(L_Hp)
612615
nU = nu*Hp
613616
size(L_Hp) == (nU, nU) || throw(ArgumentError("L_Hp size should be ($nU, $nU)"))
614-
mpc.L_Hp .= to_hermitian(L_Hp)
617+
mpc.L_Hp .= L_Hp
615618
end
616619
setmodel_controller!(mpc, x̂op_old, M_Hp, Ñ_Hc, L_Hp)
617620
return mpc

src/general.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,5 @@ repeatdiag(A, n::Int) = kron(I(n), A)
4747
"Convert 1-element vectors and normal matrices to Hermitians."
4848
to_hermitian(A::AbstractVector) = Hermitian(reshape(A, 1, 1), :L)
4949
to_hermitian(A::AbstractMatrix) = Hermitian(A, :L)
50-
to_hermitian(A::Hermitian) = A
50+
to_hermitian(A::Hermitian) = A
51+
to_hermitian(A) = A

0 commit comments

Comments
 (0)