Infinitesimal RigidityΒΆ

Definition 6 (Rigidity matrix)

Let \((G, p)\) be a \(d\)-dimensional framework with \(G = (V, E)\). The rigidity matrix \(R(G, p)\) of \((G, p)\) is the \(|E| \times d|V|\) matrix whose row labelled by \(uv \in E\) is

\[\begin{equation*} \begin{array}{rccccccccccccl} & & & & u & & & & v \\ ( & 0 & \cdots & 0 & p_u - p_v & 0 & \cdots & 0 & p_v - p_u & 0 & \cdots & 0 &) \,. \end{array} \end{equation*}\]

PyRigi: rigidity_matrix()

Definition 7 (Infinitesimal flexes)

Let \((G, p)\) be a \(d\)-dimensional framework with \(G = (V, E)\). An infinitesimal flex of \((G, p)\) is a collection \((q_v)_{v \in V}\) of elements in \(\RR^n\) such that

\[\begin{equation*} (p_u - p_v) \cdot (q_u - q_v) = 0 \quad \text{for all } uv \in E\,. \end{equation*}\]

In other words, if we form a \(d|V| \times 1\) vector \(q\) out of an infinitesimal flex, then \(q\) lies in the kernel of the rigidity matrix \(R(G, p)\).

PyRigi: inf_flexes() is_dict_inf_flex() is_vector_inf_flex()

Definition 8 (Trivial infinitesimal flexes)

Let \((G, p)\) be a \(d\)-dimensional framework with \(G = (V, E)\). A trivial infinitesimal flex is any element of the vector subspace of \(\RR^{d|V|}\) generated by the following elements:

  • \((e_i)_{v \in V}\) where \(e_i\) is the \(i\)-th element of the standard basis of \(\RR^d\);

  • \((A \cdot p_v)_{v \in V}\) where \(A\) is any \(d \times d\) skew-symmetric matrix.

An infinitesimal flex that is not trivial is called a nontrivial infinitesimal flex.

PyRigi: trivial_inf_flexes() is_trivial_flex() is_trivial_flex() is_vector_trivial_inf_flex() is_dict_trivial_inf_flex() nontrivial_inf_flexes() is_nontrivial_flex() is_vector_nontrivial_inf_flex() is_dict_nontrivial_inf_flex()

Definition 9 (Infinitesimally rigid frameworks)

A framework is called infinitesimally rigid, if all its infinitesimal flexes are trivial. A framework is called infinitesimally flexible, if it is not infinitesimally rigid.

Let \((G, p)\) be a \(d\)-dimensional framework with \(G = (V, E)\). If \(|V| \geq d+1\), the framework \((G, p)\) is infinitesimally rigid if and only if the rigidity matrix \(R(G, p)\) has rank \(d|V| - \binom{d+1}{2}\). If \(|V| \leq d+1\), the framework \((G, p)\) is infinitesimally rigid if and only if \(G\) is complete, \(p\) is injective and the set \(\{ p_v \, : \, v \in V\}\) is affinely independent.

PyRigi: is_inf_rigid() is_inf_flexible()

Definition 10 (Regular frameworks)

A \(d\)-dimensional framework \((G, p)\) is called regular if

\[\begin{equation*} \mathrm{rk} \, R(G, p) \geq \mathrm{rk} \, R(G, p') \end{equation*}\]

for any other \(d\)-dimensional framework \((G, p')\).

Definition 11 (Independent framework)

A \(d\)-dimensional framework \((G, p)\) with \(G = (V, E)\) is called independent if \(\mathrm{rk} \, R(G, p) = |E|\), otherwise it is dependent.

PyRigi: is_independent() is_dependent()

Definition 12 (Isostatic frameworks)

A framework \((G, p)\) is called isostatic if it is infinitesimally rigid and independent.

PyRigi: is_isostatic()

Definition 13 (Minimally rigid frameworks)

Let \((G,p)\) be a \(d\)-dimensional framework. The framework \((G, p)\) is called minimally (infinitesimally) \(d\)-rigid if removing any edge from \(G\) yields an (infinitesimally) flexible framework.

PyRigi: is_min_inf_rigid()

Definition 14 (Equilibrium stress)

Let \((G,p)\) be a \(d\)-dimensional framework with \(G=(V,E)\). An equilibrium stress of \((G,p)\) is a map \(\omega\colon E\rightarrow \RR\) such that for every \(v\in V\)

\[\begin{equation*} \sum_{vw\in E}\omega(vw)(p(v)-p(w)) = 0. \end{equation*}\]

Equivalently, interpreting \(\omega\) as a row vector, \(\omega\) is an equilibrium stress if and only if \(\omega \cdot R(G,p) = 0\).

PyRigi: stresses() is_stress()

Definition 15 (Stress Matrix)

Let \((G,p)\) be a \(d\)-dimensional framework with \(G=(V,E)\) and \(\omega\) be an equilibrium stress. A stress matrix of \((G,\omega)\) is the \(|V|\times|V|\) matrix \(\Omega(G,\omega)\) where, for every pair of vertices \(v,w\), we have the entry:

\[\begin{split} \Omega(G,\omega)_{(v,w)} := \begin{cases} \sum_{vw\in E}\omega(vw) & \mbox{if $v=w$}\\ -\omega(vw) & \mbox{if $vw\in E$ and $v\neq w$}\\ 0 & \mbox{otherwise} \end{cases} \end{split}\]

PyRigi: stress_matrix()