Theory Series, Part 1: Control-Affine Foundations
Drift, Input, and Model-Conditioned Attribution
Plain-Language Summary
This article builds the basic equations for the golf swing. It splits the motion into two clear parts: natural drift and active muscle force.
Key Takeaways
- The golf swing equations of motion admit a strict control-affine decomposition into drift and input.
- Generalized muscular forces enter linearly through a state-dependent control input matrix.
- The autonomous drift field encapsulates all passive gravitational, Coriolis, and velocity-dependent forces.
These entries remain visible until evidence-backed adjudication changes their governed status.
- Open / High: Critique: The Flaccid Drift Contradiction (
crit-flaccid-drift-contradiction) - Responded / Medium: Critique: Normative Ambiguity of Drift (The "Good Drift" Hypothesis) (
crit-normative-ambiguity-drift) - Open / High: Critique: Conflation of Active and Passive Muscle-Tendon Dynamics (
crit-stretch-shortening-blindspot) - Open / Critical: Critique: Tip Mass Omission (The Headless Club) (
crit-tip-mass-omission)
src/tangent_models/examples.py; not a golfer measurement.Long description
The horizontal axis is the pendulum angle from straight down, in radians; the vertical axis is its angular velocity, in radians per second. Faint arrows show the drift: the direction the model's state moves at each point with no torque. Both runs start at rest at an angle of -2.2 rad. The dashed curve is the zero-torque run, which follows the drift alone. The solid curve is the run under a constant 5 N m pivot torque, which swings faster and further. At the marked state, angle -1.94 rad and angular velocity 2.68 rad/s, three arrows show the change over 0.35 s: the drift arrow (2.68, 9.16) per second, the push arrow (0, 5.00) per second, which only changes angular velocity because torque acts on acceleration, and their sum, the state velocity the run actually has.
New to the idea? The Big Idea in Five Minutes explains drift and control without equations before this page derives them.
This is the authoritative treatment of the control-affine framework for the golf swing. An earlier article, Affine Nature of the Golf Swing, covers the same foundational material and is retained for historical reference. Readers are encouraged to use this version.
New to control theory? Here is what this foundational article covers in everyday language.
The Core Question
At a given state in the model, how much of the instantaneous motion comes from the model's own drift, and how much from the declared input channel?
What Is a State?
The state is a snapshot that is enough to predict the declared model under stated future inputs. Here it holds the rigid pose, shaft bend and their rates. Pose alone is not enough. A physiological model may need more internal states.
The Modeling Simplifications
To keep the math workable, body parts are treated as rigid. The shaft can bend, but in predictable ways. Air resistance is ignored. These are standard engineering approximations.
Abstract
- Established (textbook): Control-affine system formulation \(\dot{x} = f(x) + G(x)u\); Lagrangian derivation of rigid-body multibody dynamics; tangent space linearization.
- Proposed golf application: Applying the drift/input decomposition to golf biomechanics; the “Frozen Strategy” assumption for biological impedance; defining ZTCF family and ZVCF as diagnostic tools for swing analysis.
- Terminology: The terms “drift” and “input” are standard in nonlinear control. “Zero Torque Counterfactual (ZTCF)” and “Zero Velocity Counterfactual (ZVCF)” are the authors’ naming for these constructions in the golf context.
The identity \(\dot{x}=f_p(x)+G_p(x)u\) separates the autonomous and declared-input terms for a specified model at a fixed state. Its interpretation is conditional on the model boundary, coordinates, declared input, parameters and frozen variables, and the intervention being evaluated (a pointwise evaluation or a stated simulation horizon). This additivity does not imply orthogonality: under a chosen metric, \(f_p(x)\) and \(G_p(x)u\) may align, oppose, or be oblique. Without a separate identifiability argument and qualifying measurements, this bookkeeping does not identify neural intent, individual-muscle forces, biological effort, or a unique real-world cause.
The golf swing is a high-speed, full-body motion executed by a mechanically complex, constrained multibody system. Conventional inverse dynamics can estimate net generalized loads consistent with motion and external-force measurements, but it does not identify individual-muscle forces, neural intent, or a unique real-world cause. This paper develops a strictly theoretical control-affine model and separates its instantaneous vector field into autonomous (drift) and declared-input terms. The Zero Torque Counterfactual (ZTCF), Zero Velocity Counterfactual (ZVCF), and force taxonomy are model-conditioned diagnostics; empirical interpretation requires parameter identification, qualifying measurements, and validation.
Before writing equations, we ask a bounded question: at a specified model state, how much instantaneous evolution is assigned to the autonomous term, and how much to the declared torque input channel? This is mathematical bookkeeping inside a chosen mechanical model, not a direct reading of what the golfer intended or which muscles produced the motion.
Introduction
Traditional biomechanical analyses of the golf swing rely heavily on inverse dynamics to estimate generalized joint torques and hand forces from measured kinematics and external forces. Inverse dynamics provides net generalized loads consistent with the declared model and measurements; it does not by itself identify individual-muscle forces, intent, or biological effort.
A large state-dependent acceleration does not by itself identify muscular effort. Inverse dynamics estimates the net applied generalized load required by a prescribed motion and specified external loads. The affine decomposition instead partitions the state derivative at a chosen state. Distinguishing these operations prevents a coordinate acceleration term from being mistaken for either a measured external force or metabolic effort.
The aim of this manuscript is to establish a rigorous, strictly theoretical foundation for decomposing the chosen model’s equations into two additive components:
- Drift terms in the autonomous vector field, and
- Input terms produced by the declared generalized-torque channel.
The key mathematical observation is that the golfer–club–shaft system can be modeled as a nonlinear control-affine mechanical system. Control-affine systems admit an additive decomposition of their dynamics into passive drift and linear control input channels. Once the affine structure is established, counterfactual tools such as the Zero Torque Counterfactual (ZTCF) and Zero Velocity Counterfactual (ZVCF) follow naturally and enable mechanical attribution of forces within the model. They do not, by themselves, constitute direct physiological identification of muscle activity in a real golfer.
This foundational treatment provides a declared mechanical model and illustrative numerical consistency checks. It does not report calibrated golfer simulations or experimental validation. The linked counterfactual and application articles develop proposed analyses; successful prediction, physiological interpretation, and technique comparisons require their own data and evidence.
A useful analogy is a model with a current-dependent baseline and a declared propulsion input. At one state, its equations assign an instantaneous contribution to each. Changing propulsion changes future state, so future baseline values also change. The resulting paths generally cannot be added as independent motions. The same distinction is essential when interpreting torque, shaft response, and subsequent contact in a golf-swing model.
The following sections define the model, assemble its energy and force balance, derive the input map, and connect those calculations to the golf interpretation. Part 2 develops the counterfactual constructions and Part 3 examines drift invariance and force taxonomy.
Detailed derivations, modal approximations, and toy examples are collected in the Appendices (Part IV).
To rigorously distinguish ‘drift’ from ‘input’, we must first define the mechanical universe in which these forces exist. The concepts of active and passive are not absolute; they are defined relative to the system boundary and the level at which the inputs are modeled. A force that is ‘external’ to a sub-component may be ‘internal’ to the whole. Therefore, before deriving equations, we must explicitly fix the boundaries of the golfer–club–shaft system, specifying exactly which degrees of freedom are malleable (flexible modes) and which are directly actuated (joints).
System Definition and Modeling Assumptions
In this section we define the mathematical structure of the golfer–club–shaft system and state the modeling assumptions that bound the theoretical framework. The goal is not to fix a unique anatomical model but to specify a general class of multibody systems for which the subsequent analysis is valid.
Modeling Assumptions
These assumptions apply strictly to the theoretical decomposition presented in this manuscript (Part I). They define the mathematical boundaries of the model; empirical validation and relaxation of these assumptions will be addressed in later work.
- Rigid body segments. All anatomical segments of the golfer (torso, arms, hands) are modeled as rigid bodies with fixed mass and inertia properties.
- Flexible shaft via finite-dimensional modal approximation. The shaft is modeled using \(m\) vibration modes obtained from standard beam theory (e.g., Euler–Bernoulli or Timoshenko). Modal truncation approximates the distributed dynamics with a finite-dimensional representation.
- No ball–club impact phase. Ball impact is excluded from the domain of analysis due to its hybrid (non-smooth) dynamics. The continuous equations describe a declared phase before or after impact. A post-impact trajectory needs a separately specified initial state or an impact reset; these equations alone do not propagate the state through collision.
- No aerodynamic forces. Drag and lift forces on the clubhead and shaft are omitted in this theoretical treatment. Gravity and the ideal ground-support reactions remain. Internal interactions are included in the mechanical balance but are not external loads on the combined system.
- Torques treated as generalized inputs. Muscular physiology (activation dynamics, force–velocity, force–length, tendon elasticity) is abstracted into a net generalized torque vector \(\tau = B(q) u\). These torques serve as the control inputs in the affine control formulation.
- Mathematical Justification: At fixed state, the Hill-type expression \(\tau=\tau_{\max}f_{\text{FL}}(q)f_{\text{FV}}(\dot q)a\) is linear in activation \(a\); its state-dependent gain belongs in the input map. We nevertheless declare the mechanical input at the net-torque level and treat physiological feasibility through \(\mathcal{U}(x)\). Nonlinear activation dynamics, input-dependent impedance, saturation, or hysteresis require a richer model.
- Ground contact modeled as holonomic constraint. Feet–ground interaction is simplified as a fixed base with no slip or compliance; the golfer is treated as rooted at the ground.
- Smooth dynamical evolution (no discontinuities). Between impacts, the system evolves via smooth ordinary differential equations. Shaft deformation and all segmental interactions are continuous in time.
- No measurement noise or parameter uncertainty. The algebraic identities concern specified state values and parameters. Measurements and identified parameters are uncertain; the counterfactual treatment in Part 2 propagates such errors, while empirical magnitudes require data.
To translate these assumptions into a rigorous mathematical structure, we must first define the geometric manifold on which the system evolves. The assumptions above simplify the biomechanical reality into a deterministic state space, allowing us to describe the golfer not as a collection of tissues, but as a point moving along a curved surface defined by the joint constraints.
Generalized Coordinates and State
Let \(q\) denote \(n\) independent rigid-system coordinates in a local chart, and let \(\eta\in\mathbb R^m\) denote the retained shaft coordinates. Write \(z=(q,\eta)\) and \(N=n+m\). The modeled configuration manifold is locally represented by these \(N\) coordinates. A product \(\mathcal Q_r\times\mathbb R^m\) is an assumption of this chosen modal representation; it is not a global anatomical description. Fixed-base joint models, joint limits, and hand-loop constraints determine \(\mathcal Q_r\). They need not produce a free \(SE(3)\) factor. Denavit–Hartenberg conventions and exponential-coordinate methods describe kinematics; spatial velocity vectors are not interchangeable configuration coordinates.
For independent coordinates with a nondegenerate kinetic-energy model,
\[ T(z,v)=\tfrac12v^\top M(z)v,\qquad v=\dot z,\qquad M(z)\succ0. \]
The matrix represents a kinetic-energy metric on configuration space. Its entries change under coordinate transformations even though the physical energy does not. A redundant quaternion or constrained-coordinate representation requires its own constraints and does not justify inverting an arbitrary coordinate mass matrix.
The mechanical state belongs to the tangent bundle \(T\mathcal Q\). A local representation, using the ordering retained below, is
\[ x=(q,\dot q,\eta,\dot\eta),\qquad \dim T\mathcal Q=2N. \]
This gives \(2N\) local numbers; it does not assert that the entire tangent bundle is globally Euclidean. Position and velocity close the declared torque-driven mechanical model only when its other quantities are specified. Activation, tendon, grip, hysteresis, or estimator states require additional variables if their evolution affects future loads. Alternatively, a prescribed time history makes the model explicitly time-dependent. A short swing duration does not establish that omitted states are constant.
The geometric equation is an equation for the configuration curve \(z(t)\), not for the derivative of the full state \(x(t)\). For the kinetic-energy Levi-Civita connection,
\[ (\nabla_{\dot z}\dot z)^k =\ddot z^k+\Gamma^k_{ij}(z)\dot z^i\dot z^j. \]
With potential \(U\) and a nonconservative generalized force covector \(Q_{\mathrm{nc}}\) on the right of the force balance,
\[ \nabla_{\dot z}\dot z =-\operatorname{grad}_{M}U+M^{\sharp}Q_{\mathrm{nc}}, \qquad \operatorname{grad}_{M}U=M^{-1}\partial_z U. \]
Here \(M^{\sharp}\) converts a force covector into a configuration tangent vector; its local matrix is \(M^{-1}\). Applying another inverse mass to the already metric-defined gradient would be incorrect. If a dissipative load \(d\) is written on the left, its contribution here is \(-M^{-1}d\). The zero-input first-order drift is a vector field on \(T\mathcal Q\), or a section of \(T(T\mathcal Q)\). Only the kinetic, force-free part is the geodesic spray. Gravity, elasticity, and damping modify that field.
For example, a force-free particle with Cartesian coordinate \(r>0\) and constant speed \(\dot r\) has \(\ddot r=0\). In the coordinate \(y=r^2\), however, \(\ddot y=2\dot r^2\). The metric becomes \(M_y=m/(4y)\) and the connection coefficient is \(\Gamma^y_{yy}=-1/(2y)\), so \(\ddot y+\Gamma^y_{yy}\dot y^2=0\). Nonzero coordinate acceleration is compatible with zero physical force. Consequently, individual acceleration components and their numerical magnitudes must retain their coordinate convention, even when the complete geometric equation is consistent between charts.
These conventions follow the distinction between configuration curves, force covectors, and metric-raised forces in Bullo and Lewis’s geometric-mechanics workshop, especially the modeling discussion on PDF pages 18–22.
The two-axis universal-joint representation is a modeling approximation to the wrist; forearm pronation and supination arise primarily at the radioulnar joints. For ideal constraints \(A(z)v=0\), reaction loads have the form \(A(z)^\mathsf{T}\lambda\) and annihilate admissible virtual velocities: \(v^\mathsf{T}A^\mathsf{T}\lambda=0\). They lie in the range of the constraint Jacobian transpose, not generally in a null space of the actuation map \(B\). Constraint reactions, actuator redundancy and muscle co-contraction are different concepts (Lynch and Park 2017, sec. 8.7). See Constraint Torques at the Wrist.
Torque Inputs and Actuation Mapping
Muscular torques are abstracted as control inputs
\[u \in \mathbb{R}^{m_{u}}.\]
with
\[\tau = B(q)\, u,\]
where \(\tau \in \mathbb{R}^{n}\) is the generalized joint torque vector and \(B(q) \in \mathbb{R}^{n \times m_{u}}\) encodes actuation pathways and moment arms. At fixed configuration, \(B(q)\) maps the declared input into the \(n\) rigid-coordinate generalized-load components. The full map \(\mathcal B=[B^\mathsf T,0]^\mathsf T\) takes values in the \(N\)-dimensional cotangent fiber \(T_z^*\mathcal Q\). In the simplest case, \(B\) is constant; more generally, it may depend on configuration. In either case, torques enter linearly in the equations of motion.
Throughout this paper we treat \(u\) as the exogenous input at the mechanical level. The mapping from neural commands to \(u\) is outside the scope of this theoretical work.
While inputs drive the system, they do not act in a vacuum. The golfer must contend with—and exploit—the environmental and inertial field. The effectiveness of any torque input is conditioned by the external forces that define the system’s potential energy landscape and reaction constraints.
External Forces and Constraints
The mechanical balance retains gravity, ideal support reactions, passive joint loads, shaft elasticity and damping, and velocity-dependent inertial terms. Internal forces and coordinate-dependent inertial terms are not additional external forces on the combined system. In particular, the retained terms include:
- gravitational loading,
- inertial, Coriolis, and centrifugal effects arising from the multibody kinematics,
- passive joint contributions (if modeled explicitly),
- elastic and damping forces from shaft deformation.
Aerodynamic forces, impact forces, and non-holonomic contact effects are excluded under the assumptions above. Ground contact is modeled as a holonomic constraint that effectively fixes the base of the kinematic chain.
The remaining assembly step is to specify the hand–shaft interface and the flexible club geometry.
The grip transmits loads between the modeled golfer and club. A clamped proximal cross-section is compatible with a bending shaft. Relative grip compliance requires extra coordinates or constitutive laws; the interface assumption must match the Jacobians used to assemble inertia.
Hand–Club Kinematic Interface and Jacobian Formulation
Choose a hand-frame origin \(a_h(q)\) and orientation \(R_h(q)\). This subsection assumes a shaft clamped to that frame and small elastic deformation expressed through fixed body-frame trial functions. A finite-stiffness grip is a different interface model requiring relative coordinates and forces. One can weld the proximal shaft cross-section to the hand frame while retaining bending of the rest of the shaft; a clamped boundary does not make the entire club rigid.
For a reference centerline \(r_0(s)\) and body-frame shape matrix \(\Phi_B(s)\), use
\[ p(s,q,\eta)=a_h(q)+R_h(q)\bigl[r_0(s)+\Phi_B(s)\eta\bigr], \qquad 0\leq s\leq L. \]
In component notation, the local deformation is \(w(s, t) = \sum_{i=1}^m \phi_i(s) \eta_i(t)\). The functions must satisfy the essential clamped conditions. Head mass, head rotary inertia, and the chosen tip connection also enter the dynamic boundary problem. Empty-cantilever natural modes are not automatically the exact modes of a shaft carrying a clubhead. Admissible assumed functions can still define an approximation, whose accuracy needs convergence and frequency/response checks.
Differentiating the actual placement gives
\[ \dot p=J_q(s,q,\eta)\dot q+J_\eta(s,q)\dot\eta, \qquad J_q=\partial_qp,\quad J_\eta=R_h(q)\Phi_B(s). \]
The transport Jacobian depends on deformation because rotating a bent shaft transports a different position. The world-frame modal Jacobian depends on hand orientation. Dropping either dependence changes the velocity and kinetic energy. A hand twist and a point velocity also use different Jacobians; state the reference point and spatial/body convention before relating their components.
Let \(\mu(s)\) be shaft linear mass density. When shaft cross-section rotary inertia is neglected, its translational kinetic energy is
\[ T_s=\tfrac12\int_0^L\mu(s) \|J_q\dot q+J_\eta\dot\eta\|^2\,ds. \]
This approximation should be stated explicitly; a beam model retaining cross-section rotation requires the corresponding additional energy. Expanding this square gives the two diagonal terms and the cross term \(\dot q^\top\int\mu J_q^\top J_\eta ds\,\dot\eta\). The two scalar cross terms combine because they are transposes of one another, not because the two velocities are orthogonal.
For the head, use its center-of-mass position \(p_C(z)\) and orientation \(R_H(z)\), with body-frame inertia \(I_C^B\) about that center. Define its center-of-mass Jacobian \(J_C=\partial_zp_C\) and world angular-velocity Jacobian \(J_\omega\) by \(\omega_H=J_\omega\dot z\). Then
\[ T_H=\tfrac12m_H\|J_C\dot z\|^2 +\tfrac12(J_\omega\dot z)^\top R_H I_C^B R_H^\top(J_\omega\dot z). \]
The head center generally differs from the shaft endpoint. For an offset \(c_C\) fixed in the head frame, \(p_C=p(L,z)+R_H(z)c_C\); differentiating it retains the rotational offset velocity. Using the shaft-tip velocity with center-of-mass inertia would omit this contribution unless the center is explicitly assumed coincident with the tip.
Set \(J_s=[J_q\ J_\eta]\). The complete retained mass matrix is assembled from the supporting rigid bodies, shaft, head translation, and head rotation:
\[ M(z)=M_{\mathrm{rigid}}(z) +\int_0^L\mu J_s^\top J_s\,ds +m_HJ_C^\top J_C +J_\omega^\top R_HI_C^BR_H^\top J_\omega. \]
Here \(M_{\mathrm{rigid}}\) is embedded in the full \(N\)-coordinate space. Partitioning this complete matrix produces \(M_{qq}\), \(M_{q\eta}\), and \(M_{\eta\eta}\); club-only translational integrals must not silently replace the whole system inertia. Symmetry follows from the energy construction, and positive definiteness requires that the retained independent velocities have positive kinetic energy.
Modal normalization is a choice of coordinates. It can make the reference modal mass identity when it includes every retained inertia contribution. It does not prove that an arbitrary nonlinear model has constant identity modal mass. If \(\eta=S\xi\), then \(M_{\xi\xi}=S^\top M_{\eta\eta}S\) and \(M_{q\xi}=M_{q\eta}S\). The resulting energy is unchanged when velocities transform consistently. Altering stiffness can also alter natural mode shapes if those shapes are recomputed; claims of stiffness-independent coefficients must specify which representation is held fixed.
A Rotating Flexible-Link Check
Consider an illustrative planar assembly with rigid coordinates \((a,\theta)\) and one bending coordinate \(\eta\). With \(L=1\) m, use \(r_0=(s,0)\), \(\Phi_B=(0,(s/L)^2)^\top\), and hand origin \((a,0)\). Retain a shaft density of \(0.1\) kg/m, a \(0.2\) kg head, supporting inertia \(\operatorname{diag}(1\ \mathrm{kg},0.2\ \mathrm{kg\,m^2})\), and head center offset \((0.1,0.05)\) m. For this small-slope toy model, take head orientation \(\theta+2\eta/L\) and head inertia \(0.03\) kg m\(^2\).
The example isolates coordinate and coupling effects; these are chosen parameters, not identified golf equipment or anatomical data. At \(\eta=0.02\) m, assembling the complete energy matrix and defining \(\Gamma=-M_{\eta\eta}^{-1}M_{\eta q}\) gives approximately
\[ \begin{aligned} \Gamma(\theta=0)&=(0.050389,-0.815210),\\ \Gamma(\theta=\pi/2)&=(0.636186,-0.815210). \end{aligned} \]
The first coefficient maps translational acceleration into modal acceleration and is dimensionless; the second maps angular acceleration and has units of meters per radian. Equipment parameters have not changed. The posture-dependent direction of the modal velocity changes its overlap with the fixed world translation, changing the first coupling coefficient. Rescaling the modal coordinate would change the coefficients again without changing the physical motion.
The accompanying executable checks differentiate the point and head placements numerically, compare assembled and directly integrated kinetic energy, and recover acceleration using both the full mass matrix and its Schur complement. This is a reproducible mechanics check, not a claim that a real golfer should prefer either posture.
Notation Table
For reference, the following table summarizes the main symbols used in the manuscript.
| Symbol | Meaning |
|---|---|
| \(q\) | Independent rigid-system coordinates in a local chart |
| \(\dot{q}, \ddot{q}\) | Generalized coordinate rates and accelerations |
| \(\eta \in \mathbb{R}^{m}\) | Modal coordinates of the flexible shaft |
| \(\dot{\eta}, \ddot{\eta}\) | Modal velocities and accelerations |
| \(w(s, t)\) | Local shaft deformation field relative to the hand frame |
| \(x\) | Mechanical state on \(T\mathcal Q\), locally ordered as \((q,\dot q,\eta,\dot\eta)\) |
| \(u \in \mathbb{R}^{m_{u}}\) | Control input vector (abstracted muscular torques) |
| \(\tau \in \mathbb{R}^{n}\) | Generalized torque vector: \(\tau = B(q) u\) |
| \(B(q)\) | Input mapping matrix from control channels to generalized torques |
| \(M(q,\eta)\) | Inertia matrix for coupled rigid–flexible system |
| \(C(q,\dot{q},\eta,\dot{\eta})\) | Coriolis/centrifugal matrix |
| \(g(z)=\partial_z U_g\) | Generalized gravity load, including modal components |
| \(K_{s}\) | Modal stiffness matrix of the shaft |
| \(C_{s}\) | Modal damping matrix of the shaft |
| \(f(x)\) | Drift vector field (passive dynamics) |
| \(G(x)\) | Input vector fields defining linear influence of torque inputs |
| \(F_{\text{drift}}\) | Generalized drift force (passive component) |
| \(F_{\text{input}}\) | Generalized input force (torque-driven component) |
| \(F_{\text{total}}\) | Total generalized force |
| ZTCF | Zero Torque Counterfactual |
| ZVCF | Zero Velocity Counterfactual |
| \(\phi_i(s)\) | Declared body-frame deformation shape functions |
| \(t\) | Time |
Worked Example: Assembling a Spatial Inertia
Given: a single rigid body with mass \(m=2\) kg, center-of-mass offset \(c=(0.3,0,0)\) m from the body origin, and rotational inertia about its own center of mass \(I_c=\operatorname{diag}(0.05,0.05,0.01)\) kg m².
Steps:
- Call
spatial_inertia(mass=2.0, com=[0.3, 0.0, 0.0], inertia_com=diag([0.05, 0.05, 0.01])). - The function assembles the \(6\times6\) spatial inertia about the body origin, applying the parallel-axis shift for the \(0.3\) m offset along \(x\).
- Read the diagonal of the rotational (upper-left \(3\times3\)) block.
Result: \(\operatorname{diag}(M_{1:3,1:3})=(0.05,\ 0.23,\ 0.19)\) kg m². The \(x\)-axis entry is unchanged because the offset lies along \(x\); the \(y\)- and \(z\)-axis entries each grow by the parallel-axis term \(mc_x^2=2(0.3)^2=0.18\) kg m².
Computed by src/affine_control/dynamics.py::spatial_inertia; checked against this page by tests/test_worked_example_callouts.py::test_theory_part1_spatial_inertia.
Unified Control-Affine Derivation (Rigid + Flexible System)
Lagrangian Formulation
Use the complete configuration \(z=(q,\eta)\) and \(v=\dot z\). In the stated smooth, independent-coordinate model, let \(\mathcal L=T-U_g-\tfrac12\eta^\top K_s\eta\) and retain a separately declared passive joint load \(\tau_{\mathrm{pas}}(q,\dot q)\). For constant symmetric modal stiffness and damping matrices, the generalized force balance is
\[ \class{symref symref--M}{M(z)}\dot v+\class{symref symref--C}{C(z,v)}v+\class{symref symref--g}{g(z)} +\begin{bmatrix}\tau_{\mathrm{pas}}(q,\dot q)\\K_s\eta+C_s\dot\eta\end{bmatrix} =\begin{bmatrix}\class{symref symref--B}{B(q)}\class{symref symref--u}{u}\\0\end{bmatrix}. \]
Symbols in this equation
- Mass matrix M(q)
- Generalized inertia matrix: the symmetric positive-definite kinetic-energy metric in the chosen coordinates.
- Coriolis matrix C(q, q-dot)
- Velocity-product matrix of the kinetic model; C times the generalized velocity gives the Coriolis and centrifugal loads.
- Gravity vector g(q)
- Gravity generalized-force vector, the gradient of the gravitational potential; lowercase g is reserved for gravity.
- Actuation matrix B(q)
- Maps the declared control input to generalized forces, so the applied load is B(q) times u.
- Control input u
- Declared control input: the channel a counterfactual sets to zero. State its physical level and admissible set.
Here \(g(z)=\partial_z U_g(z)\) generally acts on both rigid and modal coordinates. The lower zero says that no direct generalized input is applied to the retained shaft coordinates. It does not set their acceleration, velocity, or restoring force to zero. Underactuation is a rank statement: the full \(N\)-row generalized-force input map has rank less than \(N\) when \(m>0\) and its lower block vanishes. An arbitrary number of channels need not equal its rank; redundant actuators are possible.
For a standard Christoffel choice of \(C\), using indices for the complete coordinate \(z\),
\[ C_{kj}(z,v)=\tfrac12\sum_{i=1}^{N} \left(\partial_i M_{kj}+\partial_j M_{ki}-\partial_k M_{ij}\right)v_i. \]
The resulting \(\dot M-2C\) is skew-symmetric. The vector \(Cv\) is fixed by this kinetic model, although a matrix representation of velocity-product terms need not be unique. The energy identity helps check the derivation: inertia and its velocity terms do not supply extra work.
If \(\tau_{\mathrm{pas}}=\partial_q U_j+d_j\) and the damping loads satisfy \(\dot q^\top d_j\geq0\) and \(C_s\succeq0\), then
\[ E=T+U_g+U_j+\tfrac12\eta^\top K_s\eta, \qquad \dot E=\dot q^\top Bu-\dot q^\top d_j-\dot\eta^\top C_s\dot\eta. \]
This balance assumes time-independent parameters and no additional work-doing external loads. A time-varying spring, moving support, aerodynamic load, or contact requires its own term. At impact a separate jump model replaces the smooth balance. Inertial coupling can redistribute energy among coordinates; it is not an additional energy source. Generalized mechanical power also does not measure metabolic expenditure.
Control-Affine State Space Form
Define the entire input-independent load consistently:
\[ h(x)=C(z,v)v+g(z) +\begin{bmatrix}\tau_{\mathrm{pas}}(q,\dot q)\\K_s\eta+C_s\dot\eta\end{bmatrix}. \]
Dropping the passive joint load here would define a different plant from the one just derived. With \(H(z)=M(z)^{-1}\), write
\[ \begin{aligned} a_{\mathrm{drift}}(x)&=-H(z)h(x),\\ A_{\mathrm{input}}(x)&=H(z)\begin{bmatrix}B(q)\\0\end{bmatrix},\\ \dot v&=a_{\mathrm{drift}}+A_{\mathrm{input}}u. \end{aligned} \]
These are acceleration contributions. The corresponding generalized force is \([Bu;0]\); force and acceleration should not be given the same name. Numerical implementations normally solve linear systems with \(M\) rather than explicitly form its inverse. The following block inverse is an explanatory identity and an independent implementation check.
Partition \(M\) into rigid and modal blocks. Because \(M\succ0\), its principal block \(M_{\eta\eta}\) and the Schur complement
\[ \Delta=M_{qq}-M_{q\eta}M_{\eta\eta}^{-1}M_{\eta q} \]
are positive definite. From the lower row of \(MH=I\),
\[ H_{\eta q}=-M_{\eta\eta}^{-1}M_{\eta q}H_{qq}, \qquad H_{qq}=\Delta^{-1}. \]
This is a positive-semidefinite reduction of \(M_{qq}\): \(M_{qq}-\Delta\succeq0\). It need not be strictly positive in every direction. For example, \(M_{qq}=3I_2\), \(M_{q\eta}=(0.5,0)^\top\), and \(M_{\eta\eta}=2\) give \(\Delta=\operatorname{diag}(2.875,3)\); the second direction is unchanged. Calling this matrix an articulated-body spatial inertia without qualification would also obscure its coordinate meaning: it is an effective generalized-coordinate inertia after eliminating the modal acceleration from this block system.
Define the coupling matrix
\[ \Gamma(z)=-M_{\eta\eta}^{-1}M_{\eta q}. \]
The input-induced accelerations at the same state satisfy
\[ \ddot q_{\mathrm{input}}=\Delta^{-1}Bu,\qquad \ddot\eta_{\mathrm{input}}=\Gamma\ddot q_{\mathrm{input}}. \]
This is the input contribution, not the total modal acceleration. The complete lower force balance instead gives
\[ \ddot\eta=\Gamma\ddot q-M_{\eta\eta}^{-1}h_\eta. \]
Thus modal gravity, elasticity, damping, and velocity terms still act even when the instantaneous input-induced component vanishes. A coupling block can also vanish at a particular configuration without proving that the entire motion is dynamically decoupled. Geometry, velocity, and the other retained terms must be considered together.
The coefficients of \(\Gamma\) depend on the current mass blocks, coordinate and modal normalization, modeled body geometry, and equipment parameters. They are not generally a fixed gear ratio of the club. Stiffness does not appear explicitly in this algebraic expression when \(M\) and the basis are held fixed; it still changes trajectories and may change a basis computed from natural modes. An input history changes future state, and therefore future drift and input matrices, even though the same-state decomposition is additive.
From an Input Map to an Acceleration Set
A matrix alone is not a mobility ellipsoid. For a declared input set \(\mathcal U(x)\), the instantaneous input-induced acceleration set is \(A_{\mathrm{input}}\mathcal U(x)\). Ellipsoidal input bounds \(u^\top Ru\leq1\) produce an ellipsoid in the image of \(A_{\mathrm{input}}R^{-1/2}\), potentially of lower dimension. Box bounds produce a generally different set. Scaling, units, and rank must be stated before comparing its axes.
For a configuration output \(y=Y(z)\), acceleration is \(\ddot y=J_Y\dot v+\dot J_Yv\). Its input contribution is \(J_YA_{\mathrm{input}}u\), while the kinematic \(\dot J_Yv\) term remains in the same-state baseline. This output-dependent calculation is what connects a generalized-coordinate result to clubhead translation or another measured quantity. It still does not establish finite-horizon reachability, impact accuracy, or a coaching optimum.
The standard mass-matrix and force–velocity conventions are developed in Lynch and Park’s Lagrangian dynamics supplement and their mass-matrix interpretation. The rotating flexible-link and rank-deficient Schur examples above are independently constructed checks, not results those sources report about golf.
First-Order State-Space Form
We now express the dynamics in first-order form. Recall
\[x = [q^{T}, \dot{q}^{T}, \eta^{T}, \dot{\eta}^{T}]^{T}.\]
The state derivative is
\[\dot{x} = \begin{bmatrix} \dot{q} \\[0.2em] \ddot{q} \\[0.2em] \dot{\eta} \\[0.2em] \ddot{\eta} \end{bmatrix} = f(x) + G(x)\,u,\]
where
\[f(x) = \begin{bmatrix} \dot{q} \\ [a_{\text{drift}}(x)]_{1:n} \\ \dot{\eta} \\ [a_{\text{drift}}(x)]_{n+1:n+m} \end{bmatrix}, \qquad G(x) = \begin{bmatrix} 0 \\ [A_{\text{input}}(x)]_{1:n,:} \\ 0 \\ [A_{\text{input}}(x)]_{n+1:n+m,:} \end{bmatrix}.\]
Here \([\cdot]_{1:n}\) and \([\cdot]_{n+1:n+m}\) denote the rigid and flexible components of the acceleration, and \([\cdot]_{:, :}\) denotes the appropriate block of the input matrix.
This is a nonlinear control-affine system:
\[\dot{\class{symref symref--x}{x}} = \class{symref symref--f}{f(x)} + \class{symref symref--G}{G(x)}\,\class{symref symref--u}{u}.\]
Symbols in this equation
- State x
- Modeled state of the declared effective plant; for a mechanical model, the generalized coordinates and their velocities.
- Drift f(x)
- Complete autonomous drift of the declared effective plant: its evolution when the declared control is zero, including every retained state-dependent load.
- Input map G(x)
- Matrix or collection of control vector fields that multiplies the declared control; uppercase G throughout control-affine equations.
- Control input u
- Declared control input: the channel a counterfactual sets to zero. State its physical level and admissible set.
Both \(f(x)\) and \(G(x)\) may depend nonlinearly on state, including through shaft flexibility. The input dependence is linear in \(u\) at a fixed state. The purely rigid-body model is recovered by setting \(m = 0\).
Structural Consequences and the Golf Interpretation
The same-state decomposition is linear in the declared input at fixed state. Flexibility changes the state, energy, bias loads, and coupled inertia; it can therefore affect both drift and input matrices. It does not, by itself, remove control-affinity. State-dependent actuator gains can also be represented by a state-dependent input map \(G(x)\) and do not by themselves break control-affinity. Nonlinear dependence on the chosen command, changing contact modes, or unmodeled actuator states requires a different or enlarged model.
Changing coordinates transforms the full vector fields consistently; it does not preserve every individual acceleration component or numerical ratio. Changing the declared input baseline is a different operation. If \(u=\alpha(x)+\beta(x)w\), the new drift is \(f+G\alpha\) and the new input matrix is \(G\beta\). Zero \(w\) is generally not zero \(u\). The drift is intrinsic only after the model, input convention, retained environment, and intervention are fixed.
A zero-input trajectory must be integrated from a stated initial condition. Subtracting instantaneous terms at recorded states does not produce that trajectory automatically. Along two different controlled trajectories, the drift values can differ because the states differ. The decomposition neither partitions a finite motion into independent additive paths nor determines a unique biological cause from kinematics.
The proposed frozen-impedance baseline holds a specified passive joint law and its parameters fixed while removing the declared driving channel. It is a modeling intervention, not proof that a golfer can independently maintain the same biological stiffness with zero net drive. Co-contraction can change torque and impedance together; its identification needs actuator and tissue models and additional observations. A clamped shaft boundary also differs from a finite-stiffness grip, even if either model uses parameters that are constant in time.
For golf, these distinctions explain why posture, torque history, shaft response, and impact sensitivity are intertwined. Changing posture can change how torque influences a particular head-motion component. The resulting trajectory changes the state from which passive loads act. Shaft elasticity stores and returns energy, and the head offset changes both its translational velocity and its contribution to inertia. None of those observations alone establishes which technique delivers the desired contact with less effort or variability. That comparison needs a feasible input history, an explicit first-contact task, calibrated parameters, and an uncertainty-aware evaluation.
The present derivation is exact for its stated finite-dimensional equations, subject to their regularity and nondegeneracy assumptions. Approximation of a distributed shaft and a human golfer remains a separate question. Verify the assembly numerically, test mode/mesh convergence, compare predicted forces and motions with suitable data, and retain the limits of those comparisons. A successful algebraic check establishes consistency of a model calculation; it does not validate physiology or a universal swing prescription.
Interactive: Drift Versus Control in a Double Pendulum
This sandbox runs the smallest member of the family above: a rigid planar double pendulum with point masses at the middle of each link, the model of src/affine_control/dynamics.py::double_pendulum_mass_matrix. For it, \(a_{\mathrm{drift}}=-M^{-1}(C\dot q+\nabla V)\) and \(A_{\mathrm{input}}u=M^{-1}Bu\), where a shoulder torque acts on link 1 and a wrist torque acts between the links. Both arms of the split are evaluated at the same state, sample by sample, along the driven run. The grey dashed linkage is different: it is the zero-torque trajectory integrated separately from the same initial state, which is what the drift samples are not.
Exploratory model output
→ Drift part of the club-tip acceleration · → Input part · - - Zero-torque counterfactual · arrow scale: 1 m on screen = — m/s²
Joint 1 (arm) acceleration, rad/s², range —
Joint 2 (club) acceleration, rad/s², range —
| At the selected time | Drift | Input |
|---|---|---|
| Arm acceleration (rad/s²) | — | — |
| Club acceleration (rad/s²) | — | — |
| Club-tip acceleration magnitude (m/s²) | — | — |
Sampled values along the driven run (data table)
| t (s) | q₁ (rad) | q₂ (rad) | Arm drift | Arm input | Club drift | Club input |
|---|
This is an exploratory model output, not a golfer measurement. The masses, lengths, starting pose and constant torques are declared illustrative values, angles are absolute and measured from the downward vertical, and the browser mirror is checked against the Python reference by tests/fixtures/widgets/drift-control-sandbox.parity.json. Watch two things. First, with the zero-torque scenario the input arrow vanishes and the driven linkage coincides with the counterfactual. Second, with torque applied the two linkages separate, so later drift values belong to states the torque helped reach. That is why the same-state split does not partition a finite motion into a “passive” path and an “active” path.
The Same Scenario, Animated
src/affine_control/double_pendulum_affine.py, src/affine_control/dynamics.py, scripts/generate_widget_parity.py. It does not play by itself.Transcript
A two-link model: an arm-like link and a club-like link, starting at rest.
At every state, the model's acceleration splits into two parts.
Blue arrow: drift, what the model does at this state with zero input.
Orange arrow: the extra acceleration from the declared shoulder torque.
Dashed: a separate zero-torque run. The paths separate, so later drift belongs to states the torque helped reach.
Model output with illustrative values. It is not a golfer measurement.
Recommended Resources
Read these sources alongside the derivation, using their stated mechanical models and conventions:
- Bullo and Lewis: Geometric Control of Mechanical Systems supplies the geometric framework. Their workshop slides, PDF pages 18–22, distinguish configuration acceleration, force covectors, and the kinetic-energy metric. The book treats mechanical control; it does not establish a golf-specific physiological interpretation.
- Lynch and Park: Lagrangian Dynamics derives mass, velocity-product, gravity, and applied-force terms. Their mass-matrix supplement explains configuration dependence and why force and acceleration generally need not align. Read the accompanying transcripts as well as the illustrations.
- Featherstone’s rigid-body dynamics teaching material supports efficient multibody computation and spatial-vector conventions. Distinguish those spatial inertias from the generalized-coordinate Schur complement used here.
The flexible-link numerical example in this article is a reproducible model check with declared illustrative parameters. These references support its underlying mechanics; they do not supply measured golfer parameters, demonstrate an optimal swing, or validate the proposed biological counterfactual.
Revision History
2026-09-10: Wired reference cluster cross-article links (#4364).
2026-09-05: Refined mechanics, control, and impact arguments (#4153, #4191, #4195).
2026-08-20: Standardized and harmonized pointwise ZTCF, instantaneous ZVCF, DCR ratio, Drift, and Control definitions (#3889).
2026-03-10: Three-pass professional assessment and formalization.
References
Citation
@online{olson,
author = {Olson, Dieter},
title = {Theory {Series,} {Part} 1: {Control-Affine} {Foundations}},
date = {},
url = {https://affinedrift.com/articles/theory-part1.html},
langid = {en},
abstract = {This article introduces the mathematical foundations of
AffineDrift, formulating golf swing biomechanics within a
control-affine framework. By decomposing system dynamics into an
autonomous drift field and linear control inputs, it establishes a
formal basis for motor control attribution and sensitivity
analysis.}
}
The following methodological objections are constructed for this article; they are not quotations or findings attributed to particular reviewers:
Muscles vs. Net Torque Abstraction
Biomechanists argue that modeling the golfer's input as a generalized torque vector $u$ is an oversimplification. Real muscles have complex force-length and force-velocity properties, meaning the available torque depends on the state $(q, \dot{q})$. By treating $u$ as an independent input, the affine model ignores the intrinsic impedance of the musculoskeletal system, potentially misattributing passive muscle stiffness (a "drift" effect) to active control.
The "Free Lunch" Fallacy
Critics suggest that emphasizing the "Drift" component implies that the resulting motion is "free" energy. However, the golfer must expend significant effort early in the swing to create the kinematic state where drift becomes dominant. By separating "Drift" from "Input" at the moment of release, the analysis might undervalue the active work done to set up the passive dynamics.
Necessity of Affine Control Theory
Why introduce the complexity of affine control theory and Lie brackets? Standard inverse dynamics already calculates the net moments required for a motion. Critics argue that decomposing these moments into $f(x)$ and $G(x)u$ adds mathematical overhead without changing the fundamental physics of $F=ma$.