Coupled 2nd Order DE: Convert to system of 1st Order

Click For Summary
SUMMARY

The discussion focuses on converting a system of two coupled second-order nonlinear differential equations into a system of four first-order nonlinear differential equations. The original equations are defined as ##\ddot{\alpha} + \ddot{\beta}\cos(\alpha-\beta)+\dot{\beta}^2\sin(\alpha-\beta)=\tau_{1}## and ##\ddot{\beta} + \ddot{\alpha}\cos(\alpha-\beta)-\dot{\alpha}^2\sin(\alpha-\beta)=\tau_{2}##. The user initially struggled with variable substitutions but ultimately found success using MATLAB's ode15i solver, which handles implicit differential equations effectively.

PREREQUISITES
  • Understanding of second-order and first-order differential equations
  • Familiarity with MATLAB programming and its ODE solvers
  • Knowledge of matrix operations and inverses in the context of differential equations
  • Basic concepts of nonlinear dynamics and coupled systems
NEXT STEPS
  • Explore MATLAB's ode15i solver for implicit differential equations
  • Study the process of converting higher-order ODEs to first-order systems
  • Learn about matrix inversion techniques in the context of differential equations
  • Investigate the implications of singular matrices in dynamical systems
USEFUL FOR

Mathematicians, engineers, and researchers working with dynamical systems, particularly those dealing with nonlinear differential equations and numerical solutions in MATLAB.

jstluise
Messages
58
Reaction score
0
It's been a while since I've played with systems of ODEs, and I seem to have forgotten some of the tricks. As an example, I have two coupled nonlinear DE that I want to convert to a system of four 1st order nonlinear DE. But, the normal way of making variable substitutions is not working of me.

Two 2nd order nonlinear DE:
##\ddot{\alpha} + \ddot{\beta}cos(\alpha-\beta)+\dot{\beta}^2sin(\alpha-\beta)=\tau_{1}##
##\ddot{\beta} + \ddot{\alpha}cos(\alpha-\beta)-\dot{\alpha}^2sin(\alpha-\beta)=\tau_{2}##

If I substitute variables ##x_1=\alpha##, ##x_2=\dot{\alpha}##,##x_3=\beta##,##x_4=\dot{\beta}##, like my initial reaction was, I get:

##\dot{x_1}=x_2##
##\dot{x_2}=-\dot{x_4}cos(x_1-x_3)-x_4^2sin(x_1-x_3)+\tau_1##
##\dot{x_3}=x_4##
##\dot{x_4}=-\dot{x_2}cos(x_1-x_3)+x_2^2sin(x_1-x_3)+\tau_2##

which isn't quite right, since it is not in the form ##\dot{\vec{\textbf{x}}}=\vec{\textbf{f}}(t,\vec{\textbf{x}})##

I'm trying to get it a form where I can run it through ODE45 or a similar solver.

Refresh my memory! :)EDIT! I believe I figured it out. I did do it right, just implementing it in Matlab had me confused. But, all I have to do in my function is use the old values for ##\dot{x_2}## and ##\dot{x_4}##. Seeing those derivatives in the rhs just threw me off. Is this the right way to go about it?
 
Last edited:
Physics news on Phys.org
You can write your equations as
$$\begin{bmatrix} 1 & \cos(\alpha - \beta) \\ \cos(\alpha - \beta) & 1 \end{bmatrix}
\begin{bmatrix} \ddot\alpha \\ \ddot\beta \end{bmatrix}
= \begin{bmatrix} -\dot\beta^2 \sin(\alpha - \beta) + r_1 \\
\dot\alpha^2 \sin(\alpha - \beta) + r_2\end{bmatrix}$$
So
$$\begin{bmatrix} \ddot\alpha \\ \ddot\beta \end{bmatrix}
= \begin{bmatrix} 1 & \cos(\alpha - \beta) \\ \cos(\alpha - \beta) & 1 \end{bmatrix}^{-1}
\begin{bmatrix} -\dot\beta^2 \sin(\alpha - \beta) + r_1 \\
\dot\alpha^2 \sin(\alpha - \beta) + r_2\end{bmatrix}$$

The matrix is singular if ##\alpha = \beta##, but in that case you only have one differential equation not two.
 
AlephZero said:
You can write your equations as
$$\begin{bmatrix} 1 & \cos(\alpha - \beta) \\ \cos(\alpha - \beta) & 1 \end{bmatrix}
\begin{bmatrix} \ddot\alpha \\ \ddot\beta \end{bmatrix}
= \begin{bmatrix} -\dot\beta^2 \sin(\alpha - \beta) + r_1 \\
\dot\alpha^2 \sin(\alpha - \beta) + r_2\end{bmatrix}$$
So
$$\begin{bmatrix} \ddot\alpha \\ \ddot\beta \end{bmatrix}
= \begin{bmatrix} 1 & \cos(\alpha - \beta) \\ \cos(\alpha - \beta) & 1 \end{bmatrix}^{-1}
\begin{bmatrix} -\dot\beta^2 \sin(\alpha - \beta) + r_1 \\
\dot\alpha^2 \sin(\alpha - \beta) + r_2\end{bmatrix}$$

The matrix is singular if ##\alpha = \beta##, but in that case you only have one differential equation not two.

That makes sense, but is that the only way to implement it into Matlab (ode45)? I thought I was onto something (see my edit in my original post), but now I'm thinking it won't work.
 
Move everything with overdots to the left hand sides. Then re-express the left hand side as a matrix times the column vector of the dotted first derivatives. So the equation is

Mxdot=f(x,t)

In your subroutine for evaluating derivatives, first calculate the right hand side vector. Then premultiply it by the inverse of M. Some equation solvers accept the more general inputs as M and f(x,t), and do the inversion for you. I'm not sure whether the equation solver you are using will do this.

Chet
 
Chestermiller said:
Move everything with overdots to the left hand sides. Then re-express the left hand side as a matrix times the column vector of the dotted first derivatives. So the equation is

Mxdot=f(x,t)

In your subroutine for evaluating derivatives, first calculate the right hand side vector. Then premultiply it by the inverse of M. Some equation solvers accept the more general inputs as M and f(x,t), and do the inversion for you. I'm not sure whether the equation solver you are using will do this.

Chet

Thanks, Chet. Turns out I was able to keep it in my original form (system of implicit DEs) and use Matlabs ode15i solver. I believe it does a similar operation by inverting the matrix...but it just saves me a lot of work! It wouldn't be too bad, but when the system I have has 8 state variables, it gets messy really fast.

Anyways, looks like ode15i was the solution I was looking for.
 

Similar threads

Replies
4
Views
2K
  • · Replies 7 ·
Replies
7
Views
2K
Replies
1
Views
1K
  • · Replies 11 ·
Replies
11
Views
4K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 2 ·
Replies
2
Views
1K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
4
Views
2K