MATLAB Answers

Nani C


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.

1 Answer

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

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.

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply today