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

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by Nani C
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 ?

*No products are associated with this question.*

Answer by Richard Brown
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.

Nani C
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
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.

## 0 Comments