Spring system

A 2-dimensional spring system.

In engineering and physics, a spring system or spring network is a model of physics described as a graph with a position at each vertex and a spring of given stiffness and length along each edge. This generalizes Hooke's law to higher dimensions. This simple model can be used to solve the pose of static systems from crystal lattice to springs. A spring system can be thought of as the simplest case of the finite element method for solving problems in statics. Assuming linear springs and small deformation (or restricting to one-dimensional motion) a spring system can be cast as a (possibly overdetermined) system of linear equations or equivalently as an energy minimization problem.

Known spring lengths

If the nominal lengths, L, of the springs are known to be 1 and 2 units respectively, then the system can be solved as followed: Consider the simple case of three nodes connected by two springs. Then the stretching of the two springs is given as a function of the positions of the nodes by

$\Delta \mathbf{L} = \begin{bmatrix}1 & -1 & 0\\ 0 & 1 & -1\end{bmatrix} \mathbf{x} - L$

Let A be that "connectivity matrix", relating each degree of freedom to the direction each spring pulls on it. So the forces on the springs is

$F_\text{springs} = -K\Delta L = -K (A \mathbf{x} - L) = -K A \mathbf{x} - KL$

where K is a diagonal matrix giving the stiffnesses of all of the springs. Then the force on the nodes is given by left multiplying by $A^\top$, which we set to zero to find equilibrium:

$F_\text{nodes} = -A^\top K A \mathbf{x} - A^\top K L = 0$

which gives the linear equation:

$A^\top K A \mathbf{x} = -A^\top K L$.

Now, $A^\top K A$ is singular, because all solutions are equivalent up to rigid-body translation. Let us prescribe a Dirichlet boundary condition, e.g., $x_1 = 2$.

Suppose K is the identity and so

$A^\top K A = \begin{bmatrix}1 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 1\end{bmatrix}$.

If we plug in $x_1 = 2$ we have

$A^\top K A \mathbf{x} = \begin{bmatrix}1 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 1\end{bmatrix}\begin{bmatrix}2 \\ x_2 \\ x_3\end{bmatrix} = -A^\top K L = \begin{bmatrix}-1\\-1\\2\end{bmatrix}$.

Incorporating the 2 to the left-hand side gives

$\begin{bmatrix}2\\-2\\0\end{bmatrix} + \begin{bmatrix} -1 & 0 \\ 2 & -1 \\ -1 & 1\end{bmatrix}\begin{bmatrix}x_2 \\ x_3\end{bmatrix} = \begin{bmatrix}-1\\-1\\2\end{bmatrix}$.

and removing rows of the system that we already know, and simplifying, leaves us with

$\begin{bmatrix}-2\\0\end{bmatrix} + \begin{bmatrix}2 & -1 \\ -1 & 1\end{bmatrix}\begin{bmatrix}x_2 \\ x_3\end{bmatrix} = \begin{bmatrix}-1\\2\end{bmatrix}$.
$\begin{bmatrix}2 & -1 \\ -1 & 1\end{bmatrix}\begin{bmatrix}x_2 \\ x_3\end{bmatrix} = \begin{bmatrix}1\\2\end{bmatrix}$.

so we can then solve

$\begin{bmatrix}x_2 \\ x_3\end{bmatrix} = \begin{bmatrix}2 & -1 \\ -1 & 1\end{bmatrix}^{-1} \begin{bmatrix}1\\2\end{bmatrix} = \begin{bmatrix}3\\5\end{bmatrix}$.

That is, $x_1=2$, as prescribed, and $x_2=3$, leaving the first spring slack, and $x_3=5$, leaving the second spring slack.