@@ -313,6 +313,7 @@ function feedback(sys1::AbstractStateSpace, sys2::AbstractStateSpace;
313
313
Wperm= :, Zperm= :, pos_feedback:: Bool = false )
314
314
315
315
timeevol = common_timeevol (sys1,sys2)
316
+ T = Base. promote_type (numeric_type (sys1), numeric_type (sys2))
316
317
317
318
if ! (isa (Y1, Colon) || allunique (Y1)); @warn " Connecting single output to multiple inputs Y1=$Y1 " ; end
318
319
if ! (isa (Y2, Colon) || allunique (Y2)); @warn " Connecting single output to multiple inputs Y2=$Y2 " ; end
@@ -359,14 +360,14 @@ function feedback(sys1::AbstractStateSpace, sys2::AbstractStateSpace;
359
360
360
361
if iszero (s1_D22) || iszero (s2_D22)
361
362
αs1_D12 = α* s1_D12
362
- A11 = mul! (Base . copymutable ( sys1. A), s1_B2, s2_D22s1_C2, α, 1 )
363
- A22 = mul! (Base . copymutable ( sys2. A), αs2_B2, s1_D22s2_C2, 1 , 1 )
364
- C11 = mul! (mutable (s1_C1), αs1_D12, s2_D22s1_C2, 1 , 1 )
365
- C22 = mul! (mutable (s2_C1), αs2_D12, s1_D22s2_C2, 1 , 1 )
366
- B11 = mul! (mutable (s1_B1), s1_B2, s2_D22* s1_D21, α, 1 )
367
- B22 = mul! (mutable (s2_B1), αs2_B2, s1_D22s2_D21, 1 , 1 )
368
- D22 = mul! (mutable (s2_D11), αs2_D12, s1_D22s2_D21, 1 , 1 )
369
- D11 = mul! (mutable (s1_D11), αs1_D12, s2_D22* s1_D21, 1 , 1 )
363
+ A11 = mul! (mutable ( copy ( sys1. A), T ), s1_B2, s2_D22s1_C2, α, 1 )
364
+ A22 = mul! (mutable ( copy ( sys2. A), T ), αs2_B2, s1_D22s2_C2, 1 , 1 )
365
+ C11 = mul! (mutable (s1_C1, T ), αs1_D12, s2_D22s1_C2, 1 , 1 )
366
+ C22 = mul! (mutable (s2_C1, T ), αs2_D12, s1_D22s2_C2, 1 , 1 )
367
+ B11 = mul! (mutable (s1_B1, T ), s1_B2, s2_D22* s1_D21, α, 1 )
368
+ B22 = mul! (mutable (s2_B1, T ), αs2_B2, s1_D22s2_D21, 1 , 1 )
369
+ D22 = mul! (mutable (s2_D11, T ), αs2_D12, s1_D22s2_D21, 1 , 1 )
370
+ D11 = mul! (mutable (s1_D11, T ), αs1_D12, s2_D22* s1_D21, 1 , 1 )
370
371
A = [A11 ((s1_B2* s2_C2) .*= α);
371
372
s2_B2* s1_C2 A22]
372
373
@@ -410,8 +411,8 @@ function feedback(sys1::AbstractStateSpace, sys2::AbstractStateSpace;
410
411
return StateSpace (A, B[:, Wperm], C[Zperm,:], D[Zperm, Wperm], timeevol)
411
412
end
412
413
413
- mutable (x:: AbstractArray ) = x
414
- mutable (x:: StaticArray ) = Base . copymutable (x)
414
+ mutable (x:: AbstractArray , :: Type{T} ) where T = convert (Matrix{T}, x)
415
+ mutable (x:: StaticArray , :: Type{T} ) where T = Matrix {T} (x)
415
416
416
417
417
418
"""
0 commit comments