How to make ode15s not to cross zero?

3 ビュー (過去 30 日間)
Akbar
Akbar 2018 年 7 月 6 日
コメント済み: Steven Lord 2018 年 7 月 6 日
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?

採用された回答

Steven Lord
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 件のコメント
Akbar
Akbar 2018 年 7 月 6 日
編集済み: Akbar 2018 年 7 月 6 日
Thank you for interesting solution. I am not using mass Matrix, and don't know if i Need it at all. I just know that the differential eq's is stiff, so i am using stiff solver, ode15s.
These are the Options i tries, and Matlab solution still crosses Zero. Seems like nonnegative thing didn't work. I wrote ones(1,14) because all 14 states should be nonnegative. I mean I have a 14 dimensional System.
options = odeset('RelTol',1e-6,'AbsTol',1e-6,'maxstep',0.2,'nonnegative',ones(1,14));
[t{ind},X{ind}] = ode15s(func,0:.01:170,X0,options);
Steven Lord
Steven Lord 2018 年 7 月 6 日
Specify 1:14 as the value for the NonNegative option.

サインインしてコメントする。

その他の回答 (1 件)

Torsten
Torsten 2018 年 7 月 6 日
Tighten the tolerances RelTol and AbsTol, e.g.
opts = odeset('RelTol',1e-8,'AbsTol',1e-8);
Best wishes
Torsten.
  2 件のコメント
Akbar
Akbar 2018 年 7 月 6 日
That didn't help, I tried, thanks though.
Torsten
Torsten 2018 年 7 月 6 日
What is the differential equation ?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

製品


リリース

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by