@@ -134,29 +134,32 @@ The ``\mathbf{P_u}`` and ``\mathbf{T_u}`` matrices are defined in the Extended H
134134
135135# Extended Help
136136!!! details "Extended Help"
137+ With ``n_j``, the ``j``th element of the ``\m athbf{n_b}`` vector introduced in [`init_ZtoΔU`](@ref)
138+ documentation, we introduce the ``\m athbf{Q}(j)`` matrix of size `(nu*nj, nu)`:
139+ ```math
140+ \m athbf{Q}(j) = \b egin{bmatrix}
141+ \m athbf{I} \\
142+ \m athbf{I} \\
143+ \v dots \\
144+ \m athbf{I} \e nd{bmatrix}
145+ ```
137146 The ``\m athbf{U}`` vector and the conversion matrices are defined as:
138147 ```math
139148 \m athbf{U} = \b egin{bmatrix}
140- \m athbf{u}(k + 0) \\
141- \m athbf{u}(k + 1) \\
142- \v dots \\
143- \m athbf{u}(k + H_c - 1) \\
144- \v dots \\
145- \m athbf{u}(k + H_p - 1) \e nd{bmatrix} , \q uad
149+ \m athbf{u}(k + 0) \\
150+ \m athbf{u}(k + 1) \\
151+ \v dots \\
152+ \m athbf{u}(k + H_p - 1) \e nd{bmatrix} , \q uad
146153 \m athbf{P_u^†} = \b egin{bmatrix}
147- \m athbf{I} & \m athbf{0} & \c dots & \m athbf{0} \\
148- \m athbf{I} & \m athbf{I} & \c dots & \m athbf{0} \\
149- \v dots & \v dots & \d dots & \v dots \\
150- \m athbf{I} & \m athbf{I} & \c dots & \m athbf{I} \\
151- \v dots & \v dots & \d dots & \v dots \\
152- \m athbf{I} & \m athbf{I} & \c dots & \m athbf{I} \e nd{bmatrix} , \q uad
154+ \m athbf{Q}(n_1) & \m athbf{0} & \c dots & \m athbf{0} \\
155+ \m athbf{Q}(n_2) & \m athbf{Q}(n_2) & \c dots & \m athbf{0} \\
156+ \v dots & \v dots & \d dots & \v dots \\
157+ \m athbf{Q}(n_{H_c}) & \m athbf{Q}(n_{H_c}) & \c dots & \m athbf{Q}(n_{H_c}) \e nd{bmatrix} , \q uad
153158 \m athbf{T_u} = \b egin{bmatrix}
154- \m athbf{I} \\
155- \m athbf{I} \\
156- \v dots \\
157- \m athbf{I} \\
158- \v dots \\
159- \m athbf{I} \e nd{bmatrix}
159+ \m athbf{I} \\
160+ \m athbf{I} \\
161+ \v dots \\
162+ \m athbf{I} \e nd{bmatrix}
160163 ```
161164 and, depending on the transcription method, we have:
162165 - ``\m athbf{P_u} = \m athbf{P_u^†}`` if `transcription` is a [`SingleShooting`](@ref)
@@ -166,19 +169,26 @@ The ``\mathbf{P_u}`` and ``\mathbf{T_u}`` matrices are defined in the Extended H
166169function init_ZtoU (
167170 estim:: StateEstimator{NT} , transcription:: TranscriptionMethod , Hp, Hc, nb
168171) where {NT<: Real }
169- model = estim. model
172+ nu = estim. model. nu
170173 # Pu and Tu are `Matrix{NT}`, conversion is faster than `Matrix{Bool}` or `BitMatrix`
171- I_nu = Matrix {NT} (I, model. nu, model. nu)
172- PU_Hc = LowerTriangular (repeat (I_nu, Hc, Hc))
173- PUdagger = [PU_Hc; repeat (I_nu, Hp - Hc, Hc)]
174- Pu = init_PUmat (estim, transcription, Hp, Hc, PUdagger)
174+ I_nu = Matrix {NT} (I, nu, nu)
175+ PuDagger = Matrix {NT} (undef, nu* Hp, nu* Hc)
176+ for j= 1 : Hc
177+ nj = nb[j]
178+ Qj = repeat (I_nu, nj, 1 )
179+ iRows = (1 : nu* nj) .+ @views nu* sum (nb[1 : j- 1 ])
180+ PuDagger[iRows, :] = [repeat (Qj, 1 , j) zeros (nu* nj, nu* (Hc- j))]
181+ end
182+ Pu = init_PUmat (estim, transcription, Hp, Hc, PuDagger)
175183 Tu = repeat (I_nu, Hp)
176184 return Pu, Tu
177185end
178186
179- init_PUmat ( _ , :: SingleShooting , _ , _ , PUdagger) = PUdagger
180- function init_PUmat (estim, :: MultipleShooting , Hp, _ , PUdagger)
181- return [PUdagger zeros (eltype (PUdagger), estim. model. nu* Hp, estim. nx̂* Hp)]
187+
188+
189+ init_PUmat ( _ , :: SingleShooting , _ , _ , PuDagger) = PuDagger
190+ function init_PUmat (estim, :: MultipleShooting , Hp, _ , PuDagger)
191+ return [PuDagger zeros (eltype (PuDagger), estim. model. nu* Hp, estim. nx̂* Hp)]
182192end
183193
184194@doc raw """
0 commit comments