How do I use a fixed step size with ODE23 and ODE45 in MATLAB?

263 views (last 30 days)
I would like to use the ODE23 and ODE45 ordinary differential equation solver functions with a fixed step size. How do I do this in MATLAB?

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 22 Feb 2012
ODE23 and ODE45 are MATLAB's ordinary differential equation solver functions. ODE23 is based on the integration method, Runge Kutta23, and ODE45 is based on the integration method, Runge Kutta45. The way that ODE23 and ODE45 utilize these methods is by selecting a point, taking the derivative of the function at that point, checking to see if the value is greater than or less than the tolerance, and altering the step size accordingly. These integration methods do not lend themselves to a fixed step size. Using an algorithm that uses a fixed step size is dangerous since you may miss points where your signal's frequency is greater than the solver's frequency. Using a variable step ensures that a large step size is used for low frequencies and a small step size is used for high frequencies. ODE23/ODE45 are optimized for a variable step, run faster with a variable step size, and clearly the results are more accurate. If you wish to obtain only those values at a certain fixed increment, do the following:
- Use ODE23/ODE45 to solve the differential equation.
- Use INTERP1 to extract only the desired points.
For example:
% the fixed step vector for desired
% output:
t0 = 0:.01:10;
[t,y] = ode23('filename',0,10);
y0 = interp1(t0,t,y);
Now, t0 and y0 are the outputs at a fixed interval.
Note that, as of MATLAB 5, you can also obtain solutions at specific time points by specifying tspan as a vector of the desired times. The time values must be in order, either increasing or decreasing.
For example:
tspan = 0:.01:10;
[t,y] = ode23('filename',tspan);

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!