@@ -15,7 +15,7 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem)
15
15
end
16
16
17
17
var (x, i) = Num (Sym {FnType{Tuple{symtype(t)}, Real}} (nameof (Variable (x, i))))
18
- vars = reshape ( [var (:x , i)(value (t)) for i in eachindex (prob. u0)], size (prob . u0) )
18
+ vars = ArrayInterface . restructure (prob . u0, [var (:x , i)(ModelingToolkit . value (t)) for i in eachindex (prob. u0)])
19
19
params = p isa DiffEqBase. NullParameters ? [] :
20
20
reshape ([Num (Sym {Real} (nameof (Variable (:α , i)))) for i in eachindex (p)],size (p))
21
21
@@ -31,7 +31,14 @@ function modelingtoolkitize(prob::DiffEqBase.ODEProblem)
31
31
end
32
32
33
33
eqs = vcat ([rhs[i] ~ lhs[i] for i in eachindex (prob. u0)]. .. )
34
- de = ODESystem (eqs,t,vec (vars),vec (params))
34
+
35
+ params = if ndims (params) == 0
36
+ [params[1 ]]
37
+ else
38
+ Vector (vec (params))
39
+ end
40
+
41
+ de = ODESystem (eqs,t,Vector (vec (vars)),params)
35
42
36
43
de
37
44
end
@@ -53,7 +60,7 @@ function modelingtoolkitize(prob::DiffEqBase.SDEProblem)
53
60
p = prob. p
54
61
end
55
62
var (x, i) = Num (Sym {FnType{Tuple{symtype(t)}, Real}} (nameof (Variable (x, i))))
56
- vars = reshape ( [var (:x , i)(value (t)) for i in eachindex (prob. u0)], size (prob . u0) )
63
+ vars = ArrayInterface . restructure (prob . u0, [var (:x , i)(ModelingToolkit . value (t)) for i in eachindex (prob. u0)])
57
64
params = p isa DiffEqBase. NullParameters ? [] :
58
65
reshape ([Num (Sym {Real} (nameof (Variable (:α , i)))) for i in eachindex (p)],size (p))
59
66
@@ -83,7 +90,13 @@ function modelingtoolkitize(prob::DiffEqBase.SDEProblem)
83
90
end
84
91
deqs = vcat ([rhs[i] ~ lhs[i] for i in eachindex (prob. u0)]. .. )
85
92
86
- de = SDESystem (deqs,neqs,t,vec (vars),vec (params))
93
+ params = if ndims (params) == 0
94
+ [params[1 ]]
95
+ else
96
+ Vector (vec (params))
97
+ end
98
+
99
+ de = SDESystem (deqs,neqs,t,Vector (vec (vars)),params)
87
100
88
101
de
89
102
end
0 commit comments