ODE Eventの冗長な検出現象への対処法
16 views (last 30 days)
Show older comments
3体問題の軌道を数値積分し、xz面/xy面との交点をEventで検出するスキームを以下のように組みました。
ivp_rtol = 1e-13; ivp_atol = 1e-15; tspan = [t0 tf]; state = [x y z vx vy vz];
optionsEvent = odeset('Events',@poincare,'Reltol',ivp_rtol, 'Abstol',ivp_atol);
[t,sol,te,ye,ie] = ode89(@(t,f) rhs(t,f,mu), tspan, state, optionsEvent);
function [value, isterminal, direction] = poincare(t,f)
value = [f(2) f(3)]; % y成分 Σ={g(x):y=0}, z成分 Σ={g(x):z=0}
direction = [1 1]; % hplane+=0 (1)
isterminal = [0 0]; % 積分継続 (0)
end
しかし、Event内で交点が2回重複し検出されてしまうケースが存在します。
重複して検出されたEventtimeの例が以下です。比較のため、同条件で逆伝搬させたときのEventtimeを並べています。

5,6番目にて、「16.18~」が13桁目の数のみ違えて検出されています。
rtol、atolの調整も試みましたが改善しませんでした。
重複した点をfind(diff~)などとして除外することもできますが、根本的な解決手法は無いでしょうか。
0 Comments
Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!