How to make ode15s not to cross zero?
3 次查看(过去 30 天)
显示 更早的评论
Here is the solution to a differential equation by simulink(ode15s, orange) and matlab(ode15s, blue). The solution mustn't cross Zero, how to prevent that in matlab ode15s?
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/191712/image.png)
0 个评论
采纳的回答
Steven Lord
2018-7-6
Does your problem involve a mass matrix? If not, use the NonNegative option as shown in the Knee Problem example on this documentation page.
If your problem does involve a mass matrix, use an Events function as shown in the bouncing ball example and the three body problem example on this documentation page. In this case you'll need to stop the solver, recompute what the new "initial" conditions should be, determine if the differential equations themselves change, and restart the solver. In the case of the bouncing ball, the ballode.m file recomputes the initial conditions at each bounce to reflect the ball rebounding from the floor.
2 个评论
更多回答(1 个)
Torsten
2018-7-6
Tighten the tolerances RelTol and AbsTol, e.g.
opts = odeset('RelTol',1e-8,'AbsTol',1e-8);
Best wishes
Torsten.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!