Re-solve before root finding when handling events in casadi #1328
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.
Description
Currently when an event is triggered in casadi we construct a linear interpolant, use a root finding algorithm to find the event time, and then go back and solve again up to the event time. This can give the wrong event time when the linear interpolant isn't a good fit to the actual solution (see #1318).
This PR changes it so that when an event is triggered we first go back and re-solve in the current time window using a more dense array of times. This solution is then used to construct a higher-order interpolant for use in the root finding algorithm. This allows the event time to be found more accurately.
I'm leaving #1318 open as there are some other (more sophisticated) methods for handling events that could be explored.
Type of change
Please add a line in the relevant section of CHANGELOG.md to document the change (include PR #) - note reverse order of PR #s. If necessary, also add to the list of breaking changes.
Key checklist:
$ flake8
$ python run-tests.py --unit
$ cd docs
and then$ make clean; make html
You can run all three at once, using
$ python run-tests.py --quick
.Further checks: