Time varying force with ode23
Mostrar comentarios más antiguos
Hi there
I have the following code:
tf = 1;
t = linspace(0,3);
Ft = zeros(length(t),1);
% Here I generate the force values at different time intervals.
for i = 1:length(t)
if t(i) <= tf
Ft(i) = Fo*sin(2*pi*t(i)/tf);
elseif t(i) > tf
Ft(i) = 0;
end
end
ic = [0, 0]; % Initial conditions
dXdt = @(t, x) [x(2);
Ft * 1/(m1+m2)];
[t, x] = ode23(dXdt, [0, 3], ic);
I'm struggling to incorportate this time varying force F(t) into the ode23 function.
Any help as to how I can maybe get this done?
Thanks in advance!
Respuesta aceptada
Más respuestas (1)
Walter Roberson
el 25 de Abr. de 2020
You cannot do that the way you want. The ode* routines cannot handle discontinuities in the driving functions. You need to break it up into two time periods, one with the force and one without the force.
tf = 1;
dXdt_F = @(t, x) [x(2); Fo*sin(2*pi*t/tf) / (m1+m2)];
dXdt_NF = @(t, x) [x(2); 0];
ic = [0, 0]; % Initial conditions
[t1, x1] = ode23(dXdt_F, [0, tf], ic);
ic2 = x1(end,:);
[t2, x2] = ode23(dXdt_NF, [tf, 3], ic2);
t = [t1; t2(2:end)];
x = [x1; x2(2:end,:)];
1 comentario
Christo van Rensburg
el 25 de Abr. de 2020
Categorías
Más información sobre Programming en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!