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.

 採用された回答

Ameer Hamza
Ameer Hamza 2020 年 3 月 11 日
編集済み: Ameer Hamza 2020 年 3 月 11 日

1 投票

You can use ode45 to solve such ODEs. See this example: https://www.mathworks.com/help/matlab/ref/ode45.html#bu3uj8b to see how your differential equation is converted into two first order ODEs.
fun = @(t, x) [x(2); -0.1/50*x(2) - 2*x(1)];
time = 0:0.001:10;
initial_condition = [0.5 0];
[t, y] = ode45(fun, time, initial_condition);
plot(t,y)
legend({'position', 'velocity'});

5 件のコメント

John D'Errico
John D'Errico 2020 年 3 月 11 日
+1. If I might add, using ODE45 is a far better solution than to write your own code. And if you will write your own code, then Euler's method is not where I would want to go anyway.
Ameer Hamza
Ameer Hamza 2020 年 3 月 11 日
Agree. Custom code will probably have numerical errors and likely to be less efficient.
Bjorn Gustavsson
Bjorn Gustavsson 2020 年 3 月 11 日
It is worth repeating that the ODE-suite functions are not necessarily suitable for integration of equations of motion. For some very simple conservative equations of motion it is blatantly straightforward to show that they do not conserve most constants of motion. For such situations we know that ode45 and its siblings have disqualifying numerical errors.
Ameer Hamza
Ameer Hamza 2020 年 3 月 11 日
Bjorn, good that you mentioned it, I didn't know this. Can you point to an example of such a scenario?
Bjorn Gustavsson
Bjorn Gustavsson 2020 年 3 月 11 日
The simplest example (straigh off the cuff) is gyration of electrically charged particles in a static homogeouns magnetic field - i.e. particle accelerated by a force:
Only one of the odeNM functions were close to conserving the particle energy and and gyro-radius, the other ones had either rather bad growth or loss of kinetic energy.
This is rather understandable, the odeNM cannot know excplicityl what constants of motion there should be - we might implement the equations of motion as coupled first-order ODEs in rather arbitrary order of the components of position and velocity.

サインインしてコメントする。

その他の回答 (1 件)

Bjorn Gustavsson
Bjorn Gustavsson 2020 年 3 月 11 日

1 投票

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:
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

カテゴリ

ヘルプ センター および File ExchangeProgramming についてさらに検索

製品

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by