Nauwkeurigheid van "Evenementen" in ode45 in Matlab

I'm consider a problem of integrating until an event occurs using ode45 in Matlab, as in here: http://www.mathworks.com/help/techdoc/math/f1-662913.html#f1-670140

Is er een manier om te bepalen hoe nauwkeurig Matlab de locatie van het evenement berekent? Meer specifiek, vertellen de gebeurtenissen u op te lossen op ODE totdat men een nul van de parameter waarde vindt, maar hoe klein is waarde ? Is er een manier om aan te geven hoe klein ik de waarde wil hebben wanneer de integratie wordt beëindigd?

2

1 antwoord

Is er een manier om te bepalen hoe nauwkeurig Matlab de gebeurtenis berekent   locatie?

Het korte antwoord lijkt "nee, maar het is toch op machineprecisie". Matlab's ode45 (en de rest, zoals ode15s , ode23 , etc.) roept een functie genaamd odezero aan, die doet het werk van het berekenen van de nulevents van de ODE-integrators. Hier zijn de relevante regels in odezero waar de tolerantie is ingesteld:

tol = 128*max(eps(t),eps(tnew));
tol = min(tol, abs(tnew - t));

Hieruit kun je twee dingen zien: (1) er is geen afhankelijkheid van eventuele gebruikersopties en (2) zelfs als je controle had, zou je het niet kleiner kunnen instellen omdat de tolerantie 128 * eps is.

Is er een manier om aan te geven hoe klein ik wil dat de waarde is wanneer de   integratie eindigt?

Matlab's ODE gebeurtenisdetectoren kijken niet naar waarde die naar nul gaat of bijna nul wordt, het ziet ernaar uit kruising nul. Als u een bepaalde waarde van de ODE-overgang een bepaalde waarde wilt laten zoeken, moet de gebeurtenisfunctie het verschil tussen de oplossing en de gewenste drempel retourneren.

1
toegevoegd