## finding minima and maxima in ODE solutions with events

September 17, 2011 at 01:43 PM | categories: odes | View Comments

# finding minima and maxima in ODE solutions with events

John Kitchin

Today we look at another way to use events in an ode solver. We use an events function to find minima and maxima, by evaluating the ODE in the event function to find conditions where the first derivative is zero, and approached from the right direction.

We use a simple ODE, y' = sin(x)*e^-0.05x, which has minima and maxima.

```
function main
```

clear all; close all; y0 = 0; options = odeset('Events',@events) [t,y,te,ye,ie] = ode45(@myode, [0 20],y0,options); plot(t,y,'r-')

options = AbsTol: [] BDF: [] Events: @events InitialStep: [] Jacobian: [] JConstant: [] JPattern: [] Mass: [] MassConstant: [] MassSingular: [] MaxOrder: [] MaxStep: [] NonNegative: [] NormControl: [] OutputFcn: [] OutputSel: [] Refine: [] RelTol: [] Stats: [] Vectorized: [] MStateDependence: [] MvPattern: [] InitialSlope: []

Put a blue circle at the minima the minima correspond to event 1, and the maxima to event 2, according to to our events function.

hold all plot(te(ie==1),ye(ie==1),'bo ') % Put a black diamond at the maxima plot(te(ie==2),ye(ie==2),'kd ')

```
'done'
```

ans = done

Events are powerful ways to interact with your ODE solutions. See also event finding, advanced event finding.

function dydx = myode(x,y) % nothing fancy here. just an oscillating function. dydx = sin(x)*exp(-0.05*x); function [value,isterminal,direction] = events(x,y) % we define two events. % at minimum, dydx = 0, direction = 1 event function is increasing after % the minimum. % % at maximum, dydx = 0, direction = -1 event function is decreasing after % the maximum % % We create a vector for each output. value = [myode(x,y) myode(x,y)]; % this is the derivative isterminal = [0 0]; % do not stop the integration direction = [1 -1]; % categories: ODEs