## ode45

on 7 May 2012

### Richard Brown (view profile)

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 ?

## Products

No products are associated with this question.

### Richard Brown (view profile)

on 7 May 2012

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.

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.

#### Join the 15-year community celebration.

Play games and win prizes!

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