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

Click For Summary

Discussion Overview

The discussion revolves around converting a pair of coupled second-order nonlinear differential equations into a system of first-order equations. Participants explore various methods for this conversion, particularly in the context of implementing the system in MATLAB using ODE solvers.

Discussion Character

  • Exploratory
  • Technical explanation
  • Mathematical reasoning
  • Homework-related

Main Points Raised

  • One participant expresses difficulty in converting two coupled second-order differential equations into a system of four first-order equations and shares their initial variable substitutions.
  • Another participant suggests expressing the equations in matrix form and notes that the matrix becomes singular when the two angles are equal, leading to only one differential equation.
  • A later reply questions the implementation of the matrix inversion method in MATLAB and whether it is the only approach available.
  • Another participant recommends moving all terms with derivatives to one side and expressing the equations in the form of a matrix multiplied by a vector of first derivatives, suggesting that some solvers may handle the inversion automatically.
  • The original poster later indicates they found a solution using MATLAB's ode15i solver, which allows them to keep the equations in their original implicit form, simplifying their work with a larger system of state variables.

Areas of Agreement / Disagreement

Participants explore multiple approaches to the problem, with no consensus on a single method being the best. The discussion remains open to various interpretations and implementations.

Contextual Notes

Some participants note the complexity of the system increases with the number of state variables, which may affect the choice of numerical methods for solving the equations.

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
3K
  • · Replies 7 ·
Replies
7
Views
2K
Replies
1
Views
1K
  • · Replies 11 ·
Replies
11
Views
4K
  • · Replies 3 ·
Replies
3
Views
3K
  • · 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