Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

ode45

Asked by Nani C

Nani C (view profile)

on 7 May 2012

Hi, Having solved a second order equation of motion using ode45 function i wonder how could i modify the function to solve a whole system of equations in matrix form [A]{xdoubledot}+[B]{xdot}+[c]{x}={p(t)}, instead of solving individual equations for x vector variables. Would that be possible ?

0 Comments

Nani C

Nani C (view profile)

Products

No products are associated with this question.

1 Answer

Answer by Richard Brown

Richard Brown (view profile)

on 7 May 2012
Accepted answer

Yes, certainly possible. The basic approach would be to turn it into a system of first order odes of twice the dimension as follows (where x and xdot are vectors):

y1 = x
y2 = xdot

then, if A is invertible

y1' = y2
y2' = A \ (-B*y2 - c*y1 + p(t))

You'd then write a file to implement this in MATLAB like this

function dy = myode(t, y)
  n = numel(y)/2;
  y1 = y(1:n);
  y2 = y(n+1:2*n);
  dy = [y2; A \ (-B*y2 - c*y1 + p(t))
end

and solve it with ode45 (or whichever solver happens to be most suitable) as usual.

2 Comments

Nani C

Nani C (view profile)

on 7 May 2012

t.y. Richard. it worked. It would be helpful if you can clarify on 'twice the dimension'. Any help links will also be useful.

Jan Simon

Jan Simon (view profile)

on 7 May 2012

You can convert an ODE of degree 2 for an n-dimensional vector to an ODE of degree 1 for a 2n-dimensional vector. This means "twice the dimensions". In other words: Instead of calculating the 1st and 2nd derivative of the position, you calculate the 1st derivative of the position and the velocity.

Richard Brown

Richard Brown (view profile)

Contact us