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

조회 수: 17 (최근 30일)
Asparagus
Asparagus 2024년 1월 26일
편집: Asparagus 2024년 1월 26일
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개)

카테고리

Help CenterFile Exchange에서 プログラミング에 대해 자세히 알아보기

태그

제품


릴리스

R2023b

Community Treasure Hunt

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

Start Hunting!