@@ -41,8 +41,15 @@ struct NonlinearSystem <: AbstractSystem
4141 ps = reduce (∪ , map (_find_params (vs), rhss); init = vnil ())
4242 new (eqs, vs, collect (ps))
4343 end
44+
45+ function NonlinearSystem (eqs, vs, ps)
46+ rhss = [eq. rhs for eq ∈ eqs]
47+ new (eqs, vs, [p. op for p in ps])
48+ end
4449end
4550
51+
52+
4653vnil () = Set {Variable} ()
4754_find_params (vs) = Base. Fix2 (_find_params, vs)
4855function _find_params (O, vs)
@@ -65,9 +72,9 @@ function calculate_jacobian(sys::NonlinearSystem)
6572 return jac
6673end
6774
68- function generate_jacobian (sys:: NonlinearSystem )
75+ function generate_jacobian (sys:: NonlinearSystem , vs = sys . vs, ps = sys . ps, expression = Val{ true }; kwargs ... )
6976 jac = calculate_jacobian (sys)
70- return build_function (jac, clean .(sys . vs), sys . ps , (), NLSysToExpr (sys))
77+ return build_function (jac, clean .(vs), clean .(ps) , (), NLSysToExpr (sys))
7178end
7279
7380struct NLSysToExpr
8491(f:: NLSysToExpr )(x) = convert (Expr, x)
8592
8693
87- function generate_function (sys:: NonlinearSystem , vs, ps, expression = Val{true }; kwargs... )
94+ function generate_function (sys:: NonlinearSystem , vs = sys . vs, ps = sys . ps, expression = Val{true }; kwargs... )
8895 rhss = [eq. rhs for eq ∈ sys. eqs]
8996 vs′ = [clean (v) for v ∈ vs]
9097 ps′ = [clean (p) for p ∈ ps]
0 commit comments