@@ -76,31 +76,29 @@ function generate_function(sys::DiffEqSystem; version::FunctionVersion = ArrayFu
7676end
7777
7878
79- function generate_ode_iW (sys:: DiffEqSystem , simplify= true ; version:: FunctionVersion = ArrayFunction)
79+ function generate_factorized_W (sys:: DiffEqSystem , simplify= true ; version:: FunctionVersion = ArrayFunction)
8080 jac = calculate_jacobian (sys)
8181
8282 gam = Variable (:gam ; known = true )
8383
8484 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
8786
8887 if simplify
89- iW = simplify_constants .(iW )
88+ Wfact = simplify_constants .(Wfact )
9089 end
9190
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
9593 if simplify
96- iW_t = simplify_constants .(iW_t )
94+ Wfact_t = simplify_constants .(Wfact_t )
9795 end
9896
9997 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)
102100
103- return (iW_func, iW_t_func )
101+ return (Wfact_func, Wfact_t_func )
104102end
105103
106104function DiffEqBase. ODEFunction (sys:: DiffEqSystem ; version:: FunctionVersion = ArrayFunction)
0 commit comments