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

19 vues (au cours des 30 derniers jours)
Asparagus
Asparagus le 26 Jan 2024
Modifié(e) : Asparagus le 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~)などとして除外することもできますが、根本的な解決手法は無いでしょうか。

Réponses (0)

Catégories

En savoir plus sur プログラミング dans Help Center et File Exchange

Tags

Produits


Version

R2023b

Community Treasure Hunt

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

Start Hunting!