# 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

Consider the simple case of three nodes, in one dimension $\mathbf {x} ={\begin{bmatrix}x_{1}\\x_{2}\\x_{3}\end{bmatrix}}$, connected by two springs. If the nominal lengths, L, of the springs are known to be 1 and 2 units respectively, i.e. $\mathbf {L} ={\begin{bmatrix}1\\2\end{bmatrix}}$, then the system can be solved as follows:
The stretching of the two springs is given as a function of the positions of the nodes by
    $\Delta \mathbf {L} =B^{\top }\mathbf {x} -\mathbf {L} ={\begin{bmatrix}-1&1&0\\0&-1&1\end{bmatrix}}\mathbf {x} -\mathbf {L}$
where $B^{\top }$ is the matrix transpose of the oriented incidence matrix
    $B={\begin{bmatrix}-1&0\\1&-1\\0&1\end{bmatrix}},$
relating each degree of freedom to the direction each spring pulls on it. The forces on the springs are
    $F_{\text{springs}}=-W\Delta \mathbf {L} =-W(B^{\top }\mathbf {x} -\mathbf {L} )=-WB^{\top }\mathbf {x} +W\mathbf {L}$
where W is a diagonal matrix giving the stiffness of every spring. Then the force on the nodes is given by left multiplying by $B$, which we set to zero to find equilibrium:
    $F_{\text{nodes}}=-BWB^{\top }\mathbf {x} +BW\mathbf {L} =0$
which gives the linear equation:
    $BWB^{\top }\mathbf {x} =BW\mathbf {L}$.
Now, the matrix $BWB^{\top }$ is singular, because all solutions are equivalent up to rigid-body translation. Let us prescribe a Dirichlet boundary condition, e.g., $x_{1}=2$.
As an example, let W be the identity matrix then
    $BWB^{\top }={\begin{bmatrix}1&-1&0\\-1&2&-1\\0&-1&1\end{bmatrix}}$
is the Laplacian matrix. Plugging in $x_{1}=2$ we have
    $BWB^{\top }\mathbf {x} ={\begin{bmatrix}1&-1&0\\-1&2&-1\\0&-1&1\end{bmatrix}}{\begin{bmatrix}2\\x_{2}\\x_{3}\end{bmatrix}}=BW\mathbf {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.