ODE Eventの冗長な検出現象への対処法

16 views (last 30 days)
Asparagus
Asparagus on 26 Jan 2024
Edited: Asparagus on 26 Jan 2024
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~)などとして除外することもできますが、根本的な解決手法は無いでしょうか。

Answers (0)

Categories

Find more on プログラミング in Help Center and File Exchange

Tags

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!