Skip to content

Commit c64c4e6

Browse files
committed
test: removed some global variables
1 parent a284603 commit c64c4e6

File tree

2 files changed

+177
-143
lines changed

2 files changed

+177
-143
lines changed

test/1_test_sim_model.jl

+45-41
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,9 @@ end
155155
@test y zeros(2,)
156156

157157
linmodel2 = LinModel(sys,Ts,i_d=[3])
158-
f2(x,u,d,_) = linmodel2.A*x + linmodel2.Bu*u + linmodel2.Bd*d
159-
h2(x,d,_) = linmodel2.C*x + linmodel2.Dd*d
160-
nonlinmodel2 = NonLinModel(f2,h2,Ts,2,4,2,1,solver=nothing)
158+
f2(x,u,d,model) = model.A*x + model.Bu*u + model.Bd*d
159+
h2(x,d,model) = model.C*x + model.Dd*d
160+
nonlinmodel2 = NonLinModel(f2,h2,Ts,2,4,2,1,solver=nothing,p=linmodel2)
161161

162162
@test nonlinmodel2.nx == 4
163163
@test nonlinmodel2.nu == 2
@@ -172,18 +172,18 @@ end
172172
nonlinmodel3 = NonLinModel{Float32}(f2,h2,Ts,2,4,2,1,solver=nothing)
173173
@test isa(nonlinmodel3, NonLinModel{Float32})
174174

175-
function f1!(xnext, x, u, d,_)
176-
mul!(xnext, linmodel2.A, x)
177-
mul!(xnext, linmodel2.Bu, u, 1, 1)
178-
mul!(xnext, linmodel2.Bd, d, 1, 1)
175+
function f1!(xnext, x, u, d, model)
176+
mul!(xnext, model.A, x)
177+
mul!(xnext, model.Bu, u, 1, 1)
178+
mul!(xnext, model.Bd, d, 1, 1)
179179
return nothing
180180
end
181-
function h1!(y, x, d,_)
182-
mul!(y, linmodel2.C, x)
183-
mul!(y, linmodel2.Dd, d, 1, 1)
181+
function h1!(y, x, d, model)
182+
mul!(y, model.C, x)
183+
mul!(y, model.Dd, d, 1, 1)
184184
return nothing
185185
end
186-
nonlinmodel4 = NonLinModel(f1!, h1!, Ts, 2, 4, 2, 1, solver=nothing)
186+
nonlinmodel4 = NonLinModel(f1!, h1!, Ts, 2, 4, 2, 1, solver=nothing, p=linmodel2)
187187
xnext, y = similar(nonlinmodel4.x0), similar(nonlinmodel4.yop)
188188
nonlinmodel4.f!(xnext,[0,0,0,0],[0,0],[0],nonlinmodel4.p)
189189
@test xnext zeros(4)
@@ -195,36 +195,37 @@ end
195195
Bd = reshape([0; 0.5], 2, 1)
196196
C = [0.4 0]
197197
Dd = reshape([0], 1, 1)
198-
f3(x, u, d, _) = A*x + Bu*u+ Bd*d
199-
h3(x, d, _) = C*x + Dd*d
198+
p=(; A, Bu, Bd, C, Dd)
199+
f3(x, u, d, p) = p.A*x + p.Bu*u+ p.Bd*d
200+
h3(x, d, p) = p.C*x + p.Dd*d
200201
solver=RungeKutta(4)
201202
@test string(solver) ==
202203
"4th order Runge-Kutta differential equation solver with 1 supersamples."
203-
nonlinmodel5 = NonLinModel(f3, h3, 1.0, 1, 2, 1, 1, solver=solver)
204+
nonlinmodel5 = NonLinModel(f3, h3, 1.0, 1, 2, 1, 1, solver=solver, p=p)
204205
xnext, y = similar(nonlinmodel5.x0), similar(nonlinmodel5.yop)
205206
nonlinmodel5.f!(xnext, [0; 0], [0], [0], nonlinmodel5.p)
206207
@test xnext zeros(2)
207208
nonlinmodel5.h!(y, [0; 0], [0], nonlinmodel5.p)
208209
@test y zeros(1)
209210

210-
function f2!(ẋ, x, u , d, _)
211-
mul!(ẋ, A, x)
212-
mul!(ẋ, Bu, u, 1, 1)
213-
mul!(ẋ, Bd, d, 1, 1)
211+
function f2!(ẋ, x, u , d, p)
212+
mul!(ẋ, p.A, x)
213+
mul!(ẋ, p.Bu, u, 1, 1)
214+
mul!(ẋ, p.Bd, d, 1, 1)
214215
return nothing
215216
end
216-
function h2!(y, x, d, _)
217-
mul!(y, C, x)
218-
mul!(y, Dd, d, 1, 1)
217+
function h2!(y, x, d, p)
218+
mul!(y, p.C, x)
219+
mul!(y, p.Dd, d, 1, 1)
219220
return nothing
220221
end
221-
nonlinmodel6 = NonLinModel(f2!, h2!, 1.0, 1, 2, 1, 1, solver=RungeKutta())
222+
nonlinmodel6 = NonLinModel(f2!, h2!, 1.0, 1, 2, 1, 1, solver=RungeKutta(), p=p)
222223
xnext, y = similar(nonlinmodel6.x0), similar(nonlinmodel6.yop)
223224
nonlinmodel6.f!(xnext, [0; 0], [0], [0], nonlinmodel6.p)
224225
@test xnext zeros(2)
225226
nonlinmodel6.h!(y, [0; 0], [0], nonlinmodel6.p)
226227
@test y zeros(1)
227-
nonlinemodel7 = NonLinModel(f2!, h2!, 1.0, 1, 2, 1, 1, solver=ForwardEuler())
228+
nonlinemodel7 = NonLinModel(f2!, h2!, 1.0, 1, 2, 1, 1, solver=ForwardEuler(), p=p)
228229
xnext, y = similar(nonlinemodel7.x0), similar(nonlinemodel7.yop)
229230
nonlinemodel7.f!(xnext, [0; 0], [0], [0], nonlinemodel7.p)
230231
@test xnext zeros(2)
@@ -269,8 +270,8 @@ end
269270
@testitem "NonLinModel linearization" setup=[SetupMPCtests] begin
270271
using .SetupMPCtests, ControlSystemsBase, LinearAlgebra, ForwardDiff
271272
Ts = 1.0
272-
f1(x,u,d,_) = x.^5 + u.^4 + d.^3
273-
h1(x,d,_) = x.^2 + d
273+
f1(x,u,d,_) = x.^5 .+ u.^4 .+ d.^3
274+
h1(x,d,_) = x.^2 .+ d
274275
nonlinmodel1 = NonLinModel(f1,h1,Ts,1,1,1,1,solver=nothing)
275276
x, u, d = [2.0], [3.0], [4.0]
276277
linmodel1 = linearize(nonlinmodel1; x, u, d)
@@ -288,8 +289,8 @@ end
288289
@test repr(nonlinmodel1.linbuffer) == "LinearizationBuffer object"
289290
@test repr(nonlinmodel1.linbuffer.buffer_f_at_u_d) == "DifferentiationBuffer with a JacobianConfig"
290291

291-
f1!(ẋ, x, u, d, _) = (ẋ .= x.^5 + u.^4 + d.^3; nothing)
292-
h1!(y, x, d, _) = (y .= x.^2 + d; nothing)
292+
f1!(ẋ, x, u, d, _) = (ẋ .= x.^5 .+ u.^4 .+ d.^3; nothing)
293+
h1!(y, x, d, _) = (y .= x.^2 .+ d; nothing)
293294
nonlinmodel3 = NonLinModel(f1!,h1!,Ts,1,1,1,1,solver=RungeKutta())
294295
linmodel3 = linearize(nonlinmodel3; x, u, d)
295296
u0, d0 = u - nonlinmodel3.uop, d - nonlinmodel3.dop
@@ -306,20 +307,23 @@ end
306307
@test linmodel3.Dd Dd
307308

308309
# test `linearize` at a non-equilibrium point:
309-
N = 5
310-
x, u, d = [0.2], [0.0], [0.0]
311-
Ynl = zeros(N)
312-
Yl = zeros(N)
313-
setstate!(nonlinmodel3, x)
314-
linmodel3 = linearize(nonlinmodel3; x, u, d)
315-
for i=1:N
316-
ynl = nonlinmodel3(d)
317-
global yl = linmodel3(d)
318-
Ynl[i] = ynl[1]
319-
Yl[i] = yl[1]
320-
global linmodel3 = linearize(nonlinmodel3; u, d)
321-
updatestate!(nonlinmodel3, u, d)
322-
updatestate!(linmodel3, u, d)
310+
Ynl, Yl = let nonlinmodel3=nonlinmodel3
311+
N = 5
312+
Ynl = zeros(N)
313+
Yl = zeros(N)
314+
x, u, d = [0.2], [0.0], [0.0]
315+
setstate!(nonlinmodel3, x)
316+
linmodel3 = linearize(nonlinmodel3; x, u, d)
317+
for i=1:N
318+
ynl = nonlinmodel3(d)
319+
yl = linmodel3(d)
320+
Ynl[i] = ynl[1]
321+
Yl[i] = yl[1]
322+
linmodel3 = linearize(nonlinmodel3; u, d)
323+
updatestate!(nonlinmodel3, u, d)
324+
updatestate!(linmodel3, u, d)
325+
end
326+
Ynl, Yl
323327
end
324328
@test all(isapprox.(Ynl, Yl, atol=1e-6))
325329
end

0 commit comments

Comments
 (0)