152
152
153
153
@testitem " NonLinModel construction" setup= [SetupMPCtests] begin
154
154
using . SetupMPCtests, ControlSystemsBase, LinearAlgebra
155
+ using DifferentiationInterface
156
+ import FiniteDiff
155
157
linmodel1 = LinModel (sys,Ts,i_u= [1 ,2 ])
156
158
f1 (x,u,_,model) = model. A* x + model. Bu* u
157
159
h1 (x,_,model) = model. C* x
243
245
@test xnext ≈ zeros (2 )
244
246
nonlinemodel7. h! (y, [0 ; 0 ], [0 ], nonlinemodel7. p)
245
247
@test y ≈ zeros (1 )
248
+ nonlinemodel8 = NonLinModel (f2!, h2!, 1.0 , 1 , 2 , 1 , 1 , p= p, jacobian= AutoFiniteDiff ())
249
+ @test nonlinemodel8. jacobian == AutoFiniteDiff ()
246
250
247
-
248
251
@test_throws ErrorException NonLinModel (
249
252
(x,u)-> linmodel1. A* x + linmodel1. Bu* u,
250
253
(x,_,_)-> linmodel1. C* x, Ts, 2 , 4 , 2 , 1 , solver= nothing )
280
283
end
281
284
282
285
@testitem " NonLinModel linearization" setup= [SetupMPCtests] begin
283
- using . SetupMPCtests, ControlSystemsBase, LinearAlgebra, ForwardDiff
286
+ using . SetupMPCtests, ControlSystemsBase, LinearAlgebra
287
+ using DifferentiationInterface
288
+ import ForwardDiff, FiniteDiff
284
289
Ts = 1.0
285
290
f1 (x,u,d,_) = x.^ 5 .+ u.^ 4 .+ d.^ 3
286
291
h1 (x,d,_) = x.^ 2 .+ d
@@ -292,12 +297,20 @@ end
292
297
@test linmodel1. Bd ≈ 3 * d.^ 2
293
298
@test linmodel1. C ≈ 2 * x.^ 1
294
299
@test linmodel1. Dd ≈ 1 * d.^ 0
295
- linmodel2 = LinModel (nonlinmodel1; x, u, d)
296
- @test linmodel1. A ≈ linmodel2. A
297
- @test linmodel1. Bu ≈ linmodel2. Bu
298
- @test linmodel1. Bd ≈ linmodel2. Bd
299
- @test linmodel1. C ≈ linmodel2. C
300
- @test linmodel1. Dd ≈ linmodel2. Dd
300
+ linmodel1b = LinModel (nonlinmodel1; x, u, d)
301
+ @test linmodel1. A ≈ linmodel1b. A
302
+ @test linmodel1. Bu ≈ linmodel1b. Bu
303
+ @test linmodel1. Bd ≈ linmodel1b. Bd
304
+ @test linmodel1. C ≈ linmodel1b. C
305
+ @test linmodel1. Dd ≈ linmodel1b. Dd
306
+
307
+ nonlinmodel2 = NonLinModel (f1,h1,Ts,1 ,1 ,1 ,1 ,solver= nothing , jacobian= AutoFiniteDiff ())
308
+ linmodel2 = linearize (nonlinmodel2; x, u, d)
309
+ @test linmodel2. A ≈ 5 * x.^ 4 atol= 1e-3
310
+ @test linmodel2. Bu ≈ 4 * u.^ 3 atol= 1e-3
311
+ @test linmodel2. Bd ≈ 3 * d.^ 2 atol= 1e-3
312
+ @test linmodel2. C ≈ 2 * x.^ 1 atol= 1e-3
313
+ @test linmodel2. Dd ≈ 1 * d.^ 0 atol= 1e-3
301
314
302
315
f1! (ẋ, x, u, d, _) = (ẋ .= x.^ 5 .+ u.^ 4 .+ d.^ 3 ; nothing )
303
316
h1! (y, x, d, _) = (y .= x.^ 2 .+ d; nothing )
0 commit comments