I need to obtain second derivative from a 2nd order ode

Hi, I solved following 2 coupled 2nd order odes:
m*x"+c1*x'+k1*x=F1
m*y"+c2*y'+k2*y=F2
I used ode45 and obtained x,x',y and y'.
I need to obtain x" too. Can anyone please tell me how can I do so?

 Risposta accettata

So, after rethinking the whole problem it looks that you are doing it 100% right.
You split up the 2nd order ODE into a coupled system of 1st order ODEs. After solving this system you get x, x’, y and y’. Now you want x’’ and y’’. This can be obtained from x’,x,y and y’ since you have a representation of x’’and y’’ through x,x’,y and y’. So this 2nd order ODE gives
m*x"+c1*x'+k1*x=F1
x‘‘ = (F1-ci*x‘-k1*x)/m
Since you know x and x‘ you can get x‘‘.

2 Commenti

What if the second order derivative is a function of some other second order derivatives. I basically have a 14 dof second order system I want to obtain all the 14 second order derivatives but they are function of other 2nd order dof. So how to go about that?
Solve your system for the 2nd order derivatives of the variables.
Usually, the system can be written as
M(t,y,y') * y'' = f(t,y,y')
with a matrix M and a vector f both depending only on t,y, and y'
Then
y'' = M\f

Accedi per commentare.

Più risposte (2)

Hi,
Matlab can solve ODE of first order only. You have to convert your 2nd order ODE to a sytem of coupled 1st order ODE’s. How this is done can be obtained here:

1 Commento

Thanks.
I reduced them to first order as:
dz(1)= z(2);
dz(2)=(F1-c1*z(2)-k1*z(1))/m;
dz(3)= z(4);
dz(4)=(F2-c2*z(4)-k2*z(3))/m;
So, z(:,1)=x, z(:,2)=x' , z(:,3)=y , z(:,4)=y'
Now if I want to obtain x", can MATLAB do it?

Accedi per commentare.

I would suggest reading this article:
Your code should look similar to this:
function example
x_0 = [2,2];
tspan = [0,20];
[t,x] = ode45(@my_func,tspan,x_0);
plot(t,x);
function xbar = my_func( t,x )
F_1 = 10;
c_1 = 2;
k_1 = 1;
m = 5;
xbar = [x(2); (F_1 - c_1*x(2) - k_1*x(1))/m];
end
end
Where x(1) is x’ and x(2) is x’’.

1 Commento

Thanks!!
But c1 shd be multiplied with x' and k1 with x. I need all three of them, x, x' and x".
here is my code:
function dz=znew(t,z)
m=7.5;
c_x=1880;
c_y=2160;
k_x=27300;
k_y=30200;
F_0x=460;
F_0y=350;
w=2;
dz=zeros(size(z));
dz(1)=z(2);
dz(2)=(sin(w*t)*F_0x-c_x*z(2)-k_x*z(1))/m;
dz(3)=z(4);
dz(4)=(sin(w*t)*F_0y-c_y*z(4)-k_y*z(3))/m;
clear all
close all
echo on
z0=[0 0 0 0];
[t,z]=ode45(@znew2,[0 10],z0);
plot(t,z(:,1));
title ('t vs x');
xlabel ('time (sec)');
ylabel ('tool displacement x (m)')
grid on;
echo off

Accedi per commentare.

Richiesto:

il 5 Ago 2011

Modificato:

il 16 Mag 2022

Community Treasure Hunt

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

Start Hunting!

Translated by