16 views (last 30 days)

Show older comments

Good afternoon.

I am trying to use ode45(...) function to approximate the solution to the differential equation. Moreover, I am trying to do it with different spans by using different step sizes in the span.

So, I am changing the parameter dt:

tspan = 0:dt:1;

ode_func = @(t, x, flag) 1 - x + t;

[~, sol] = ode45(ode_func, tspan, x0);

Where dt takes values from `[0.001:0.001:0.01 0.02:0.01:0.1 0.1:0.1:0.5 1.0].

The problem is that, when I take the dt=1.0. The tspan is then just [0 1], and the ode45() funcion takes it as just start and end points of the range (and calculates the span of 41 values instead of using just these 2 values).

How to force ode45 to use JUST THESE values? I understand that it doesn't make much sense, but I want to plot a graph of dependency of the errors on that step size.

Star Strider
on 24 Feb 2021

The tspan argument can be anything you want it to be (within limits).

To have ode45 to evaluate and output at only those values:

tspan = [0.001:0.001:0.01 0.02:0.01:0.1 0.1:0.1:0.5 1.0];

tspan = unique(tspan);

ode_func = @(t, x, flag) 1 - x + t;

x0 = 0;

[~, sol] = ode45(ode_func, tspan, x0);

figure

plot(tspan, sol, '-p')

grid

xlabel('Time')

ylabel('x')

The unique call is necessary because of some repeated (duplicated) values in the original vector.

Star Strider
on 24 Feb 2021

It actually returns 24 elements, because that is the number of elements in tspan, as your vector defines them.

The MATLAB ODE solvers are adaptive, and given only 2 elements for tspan, return as many solutions as the algorithm determines that it needs to correctly evaluate the system. Given a tspan vector of more than 2 elements, it reports (interpolates) solutions at only those time points, although it evaluates the same way between the lower and upper limits of the tspan vector.

Steven Lord
on 24 Feb 2021

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

Start Hunting!