@@ -76,31 +76,29 @@ function generate_function(sys::DiffEqSystem; version::FunctionVersion = ArrayFu
76
76
end
77
77
78
78
79
- function generate_ode_iW (sys:: DiffEqSystem , simplify= true ; version:: FunctionVersion = ArrayFunction)
79
+ function generate_factorized_W (sys:: DiffEqSystem , simplify= true ; version:: FunctionVersion = ArrayFunction)
80
80
jac = calculate_jacobian (sys)
81
81
82
82
gam = Variable (:gam ; known = true )
83
83
84
84
W = LinearAlgebra. I - gam* jac
85
- W = SMatrix {size(W,1),size(W,2)} (W)
86
- iW = inv (W)
85
+ Wfact = lu (W, Val (false ), check= false ). factors
87
86
88
87
if simplify
89
- iW = simplify_constants .(iW )
88
+ Wfact = simplify_constants .(Wfact )
90
89
end
91
90
92
- W = inv (LinearAlgebra. I/ gam - jac)
93
- W = SMatrix {size(W,1),size(W,2)} (W)
94
- iW_t = inv (W)
91
+ W_t = LinearAlgebra. I/ gam - jac
92
+ Wfact_t = lu (W_t, Val (false ), check= false ). factors
95
93
if simplify
96
- iW_t = simplify_constants .(iW_t )
94
+ Wfact_t = simplify_constants .(Wfact_t )
97
95
end
98
96
99
97
vs, ps = sys. dvs, sys. ps
100
- iW_func = build_function (iW , vs, ps, (:gam ,:t ); version = version)
101
- iW_t_func = build_function (iW_t , vs, ps, (:gam ,:t ); version = version)
98
+ Wfact_func = build_function (Wfact , vs, ps, (:gam ,:t ); version = version)
99
+ Wfact_t_func = build_function (Wfact_t , vs, ps, (:gam ,:t ); version = version)
102
100
103
- return (iW_func, iW_t_func )
101
+ return (Wfact_func, Wfact_t_func )
104
102
end
105
103
106
104
function DiffEqBase. ODEFunction (sys:: DiffEqSystem ; version:: FunctionVersion = ArrayFunction)
0 commit comments