Time-dependent parameter in ODE solver

I was trying to understand how to deal with time-dependent parameter in ODE solver. Having this error "Error using interp1>reshapeAndSortXandV - X and V must be of the same length."
Please explain what the issue.
tspan = 1:5;
y0 = 0;
a = 1:5;
[t,y] = ode45(@(t,y)fun(t,y,a),tspan, y0);
function v = fun(t,y,a)
t_dummy = t;
a = interp1(t_dummy,a,t);
v = 2*a.*t;
end

 Respuesta aceptada

The interp1 use in the documentation section for time-dependent parameters refers to vector arguments with a dependent variable as a function of time. The interpolation would then return an interpolated value of the dependent variable at a specific time.
You need to pass ‘tv’ (or some other time vector with appropriate limits) to ‘fun’ as well in order to do the interpolation —
tspan = 1:5;
y0 = 0;
a = 1:5;
tv = 1:5;
[t,y] = ode45(@(t,y)fun(t,y,a,tv),tspan, y0);
figure
plot(t, y)
grid
xlabel('Time')
ylabel('Y')
function v = fun(t,y,a,tv)
a = interp1(tv,a,t);
v = 2*a.*t;
end
That produces a consistent result.
.

2 comentarios

Monirul Hasan
Monirul Hasan el 10 de Nov. de 2023
Got it. Thanks you.
Star Strider
Star Strider el 10 de Nov. de 2023
As always, my pleasure!

Iniciar sesión para comentar.

Más respuestas (0)

Productos

Versión

R2022b

Etiquetas

Preguntada:

el 10 de Nov. de 2023

Comentada:

el 10 de Nov. de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by