%% Compare Stiff ODE Solvers
% The ode15s solver is a good first choice for most stiff problems. However, the other stiff solvers might be more efficient for certain types of problems. This example solves a stiff test equation using all four stiff ODE solvers.
% Consider the test equation
% y' = -\lambda y.
% The equation becomes increasingly stiff as the magnitude of \lambda increases. Use \lambda = 1 \times 10^9 and the initial condition y(0)=1 over the time interval [0 0.5]. With these values, the problem is stiff enough that ode45 and ode23 struggle to integrate the equation. Also, use odeset to pass in the constant Jacobian J = \frac{\partial f}{\partial y} = - \lambda and turn on the display of solver statistics.

lambda = 1e9;
y0 = 1;
tspan = [0 0.5];
opts = odeset('Jacobian',-lambda,'Stats','on');

%
% Solve the equation with ode15s, ode23s, ode23t, and ode23tb. Make subplots for comparison.

subplot(2,2,1)
tic, ode15s(@(t,y) -lambda*y, tspan, y0, opts), toc
title('ode15s')
subplot(2,2,2)
tic, ode23s(@(t,y) -lambda*y, tspan, y0, opts), toc
title('ode23s')
subplot(2,2,3)
tic, ode23t(@(t,y) -lambda*y, tspan, y0, opts), toc
title('ode23t')
subplot(2,2,4)
tic, ode23tb(@(t,y) -lambda*y, tspan, y0, opts), toc
title('ode23tb')

% The stiff solvers all perform well, but ode23s completes the integration with the fewest steps and runs the fastest for this particular problem. Since the constant Jacobian is specified, none of the solvers need to calculate partial derivatives to compute the solution. Specifying the Jacobian benefits ode23s the most since it normally evaluates the Jacobian in every step.
% For general stiff problems, the performance of the stiff solvers varies depending on the format of the problem and specified options. Providing the Jacobian matrix or sparsity pattern always improves solver efficiency for stiff problems. But since the stiff solvers use the Jacobian differently, the improvement can vary significantly. Practically speaking, if a system of equations is very large or needs to be solved many times, then it is worthwhile to investigate the performance of the different solvers to minimize execution time.
% Copyright 2012 The MathWorks, Inc.