feat: add SemilinearODEFunction
and SemilinearODEProblem
#3739
+404
−29
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Generates
Where
x2
is the upper triangle ofx * x'
as a linear vector with unnecessary elements zeroed. This is whatSymbolics.semiquadratic_form
returns.In terms of codegen, the IIP form uses a DiffCache to avoid allocating a new buffer for
x2
each time (and to allow passing duals) and generates the equivalent ofThe jacobian for f1 is
B * x2' + C'
wherex2'
is the jacobian ofx2
andC'
that ofC
. This again uses the DiffCache and generates code with the same structure as above. For sparse forms, it is basically identical except the array from the DiffCache is used as thenzvals
of aSparseMatrixCSC
.Still needs a little more implementation for the sparse form, tests and docs.