Solving an ODE in matlab
Show older comments
Can you guys help me?
?̈(?) = -(0.1/50) ?̇(?)-2?(?)
How to numerically integrate to find a solution for ??
Speed of the mass in time-step ? + Δ? is:
?̇(? + Δ?) ≈ ?̇(?) + ?̈(?) ∗ Δ?
and the position in time-step ? + Δ? is:
?(? + Δ?) ≈ ?(?) + ?̇(?) ∗ Δ?
I want to put the previous two equations in a loop and loop from ? = 0 s to ? = 10 s(step Δ? = 0.001 s). And then plot those two graphs into in graph.
Assuming the mass is let go from initial displacement ?(0) = 0.5 m.
But I can’t get it to work in matlab.
Accepted Answer
More Answers (1)
Bjorn Gustavsson
on 11 Mar 2020
First thing you should learn/revise/refresh is how to convert higher-order ODEs to sets of coupled first-order ODEs.
You have an equation of motion (well it might be something completely different, but...)

By noting that
and
, you can convert your second-order ODE to two coupled first-oder ODEs:
and
, you can convert your second-order ODE to two coupled first-oder ODEs:

Now you have your equation in a format suitable for numerical integration with the odeNN-suite (starting with ode45 I think is the knee-jerk recommendation). To do that you write a function returning a vector with the left-hand-side of the two equations above as a function of time t and v and x. Something like this:
function dxdtdvdt = my_eq_o_motion(t,xv)
x = xv(1);
v = xv(2);
acceleration = % whatever you need for the acceleration as a function of x v and t
dxdtdvdt = [v;acceleration];
end
HTH
Categories
Find more on Programming in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!