Solving ODE with piecewise driving force
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Moosejr
am 5 Apr. 2023
Kommentiert: Moosejr
am 13 Apr. 2023
I have the following equation of motion
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1346069/image.png)
with the driving force
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1346074/image.png)
I want to solve the equation numerically, as I might want to slightly alter the driving term later.
I can solve the ODE with
by using ODE45. However, If I now try to include the condition that when the driving force reaches zero it should stay zero, I get the following:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1346079/image.png)
tspan = [0 5];
V0 = 0;
[t,V] = ode45(@(t, V) Force(t,V), tspan, V0);
f = Force(t,V);
figure(1)
subplot(1,2,1)
plot(t,V)
xlabel('t')
ylabel('y')
subplot(1,2,2)
plot(t,f)
xlabel('t')
ylabel('Driving Force')
function RHS = Force(t,V)
RHS = 2*exp(-t) - V;
if RHS < 0
RHS = 0;
end
end
The solution y vs t looks OK, in the sense that the object stops being accelerated when the driving force reaches zero. However, given what I have written in the force function I would expect the driving force to become zero. The plot shows that this is clearly not the case, which also makes me suspicous of the solution for y vs t.
My question is then, how do I correctly solve the ODE with the piecewise driving force term?
0 Kommentare
Akzeptierte Antwort
Sam Chak
am 5 Apr. 2023
Hi @Moosejr
tspan = [0 5];
V0 = 0;
sol = ode45(@(t, V) Force(t,V), tspan, V0);
t = linspace(0, 5, 5001);
[V, Vp] = deval(sol, t); % V is output, Vp is V-prime (V')
figure(1)
subplot(2,1,1)
plot(t, V, 'linewidth', 1.5), grid on
xlabel('t')
ylabel('y')
subplot(2,1,2)
plot(t, Vp, 'linewidth', 1.5), grid on
xlabel('t')
ylabel('Driving Force')
function RHS = Force(t, V)
fcn = 2*exp(-t) - V;
if fcn > 0
RHS = 2*exp(-t) - V;
else
RHS = 0;
end
end
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Ordinary Differential Equations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!