The rod equation of Chapter 8.10 governs a single member lying along a line. A truss is many such members pointing in many directions, pinned together at their ends. Nothing new is needed physically, since each rod still obeys \(\delta = NL/EA\), but the bookkeeping changes: each rod has its own axis, while the joints they share move in a common frame. This chapter builds the machinery that translates between the two, by hand and on a structure small enough to check every entry.
What a truss is
Figure 8.12.1 shows the simplest case. Two rods meet at a pinned joint, the other two ends are fixed, and a force \(P\) acts at the joint. The pins are assumed frictionless and moment free, so each rod can carry only axial force, which is why loads may be applied at joints and nowhere else. In two dimensions each joint can translate in \(x\) and \(y\), so it has two degrees of freedom.
Figure 8.12.1: A simple truss: two rods, one loaded joint and two supports.
The analysis begins by numbering every rod and every joint, since every quantity below is indexed by one or the other. Figure 8.12.2 fixes rods in squares and nodes in circles, a convention worth keeping because the two sets of numbers are used in different equations and confusing them is the commonest source of error.
Figure 8.12.2: Rods numbered in squares, nodes in circles.
Each rod carries four quantities of interest: the normal force \(N_i\), the normal stress \(\sigma_i\), the strain \(\varepsilon_i\) and the deformation \(\delta_i\). Each node carries two: the nodal force \(f_j\) and the nodal displacement \(u_j\). The question a designer asks is whether the structure can carry the load, which turns into requirements on the maximum stress, the maximum displacement and the reaction forces at the supports.
The Golden Quad for a truss
Figure 8.12.3 is Figure 8.9.1 redrawn with the truss quantities in place. The internal, rod-level quantities are on the left, the external, node-level quantities on the right, and the same three relations join them.
Figure 8.12.3: The three relations of Chapter 8.9, written for a truss.
Reading the arrows, equilibrium connects the rod forces to the nodal forces, the material relation connects the strains to the stresses through \(\sigma_i = E_i\varepsilon_i\), and the deformation relation connects the nodal displacements to the rod deformations through \(\delta_i = \varepsilon_i L_i\). Combining the last two gives what each rod contributes,
which is 8.9.1, itself the simplest solution of the boundary value problem 8.10.5 with no body load. Because we are solving that problem member by member rather than as a field over the structure, this approach is called the direct method: it attacks the differential equation directly, at the cost of only working for members whose solution we already know.
Figure 8.12.4: Boundary conditions and the degrees of freedom of the loaded node.
For the structure in Figure 8.12.4 the supports impose \(u_2^x = u_2^y = u_3^x = u_3^y = 0\), and node 1 is free with two degrees of freedom. We collect them, and the nodal loads, into vectors
\[
\bm u = \begin{bmatrix} u_1^x \\ u_1^y \end{bmatrix},
\qquad
\bm f = \begin{bmatrix} f_1^x \\ f_1^y \end{bmatrix}
\]
leaving the known value \(f_1^y = -P\) to be substituted at the very end. Working symbolically for as long as possible is deliberate: the structure of the answer is visible in the symbols and invisible in the numbers.
Three matrices
The goal is a relation between the loads and the displacements of the form \(\bm S \bm u = \bm f\), from which \(\bm u = \bm S^{-1}\bm f\). Figure 8.12.5 shows how the three relations produce it.
Figure 8.12.5: The three matrices and the two routes between loads and displacements.
The deformation relation is a matrix \(\bm A\) that turns nodal displacements into rod deformations,
\[
\bm\delta = \bm A\,\bm u
\tag{8.12.2}\]
The material relation is a diagonal matrix \(\bm S^e\) holding each rod’s stiffness from 8.12.1,
\[
\bm N = \bm S^e\,\bm\delta
\tag{8.12.3}\]
and equilibrium of each joint turns rod forces into nodal forces,
\[
\bm f = \bm A^\mathsf{T}\,\bm N
\tag{8.12.4}\]
The transpose in 8.12.4 is a consequence of energy conservation: the work done by the nodal forces on the nodal displacements must equal the work done by the rod forces on the rod deformations, \(\bm f^\mathsf{T}\bm u = \bm N^\mathsf{T}\bm\delta = \bm N^\mathsf{T}\bm A\bm u\), for every \(\bm u\). The practical consequence is that we may derive whichever of \(\bm A\) and \(\bm A^\mathsf{T}\) is easier and simply transpose it.
Chaining the three gives the structural stiffness matrix
\[
\boxed{\bm f = \bm A^\mathsf{T}\bm N = \bm A^\mathsf{T}\bm S^e\bm\delta = \underbrace{\bm A^\mathsf{T}\bm S^e\bm A}_{\bm S}\,\bm u}
\tag{8.12.5}\]
which is symmetric, because \(\bm S^e\) is diagonal and \((\bm A^\mathsf{T}\bm S^e\bm A)^\mathsf{T} = \bm A^\mathsf{T}\bm S^e\bm A\). Once \(\bm u\) is known, the rod quantities follow by walking the arrows backwards: \(\bm\delta = \bm A\bm u\), then \(\bm N = \bm S^e\bm\delta\), then \(\sigma_i = N_i/A_i\).
Example: A three-rod truss
Figure 8.12.6 shows the structure. Rod 1 is horizontal with length \(L\), rod 2 runs diagonally at \(45^\circ\) with length \(\sqrt2 L\), and rod 3 is vertical with length \(L\). All three have the same \(E\) and \(A\). Node 1 is free and carries the load; nodes 2, 3 and 4 are fixed.
Figure 8.12.6: The three-rod truss. Node 1 is free with displacements \(u_1^x\) and \(u_1^y\).
We follow a fixed sequence: number the rods and nodes, choose a coordinate system, introduce the displacement and load vectors, introduce the rod vectors, build \(\bm A\) or \(\bm A^\mathsf{T}\), build \(\bm S^e\), assemble, and solve. The vectors are
\[
\bm u = \begin{bmatrix} u_1^x \\ u_1^y \end{bmatrix},
\qquad
\bm f = \begin{bmatrix} f_1^x \\ f_1^y \end{bmatrix},
\qquad
\bm\delta = \begin{bmatrix}\delta_1\\\delta_2\\\delta_3\end{bmatrix},
\qquad
\bm N = \begin{bmatrix}N_1\\N_2\\N_3\end{bmatrix}
\]
Building A by unit displacements
Read 8.12.2 column by column. Setting \(\bm u = [1, 0]^\mathsf{T}\) gives \(\bm\delta\) equal to the first column of \(\bm A\), and \(\bm u = [0, 1]^\mathsf{T}\) gives the second. Each column is therefore the set of rod deformations produced by moving the free node one unit in one coordinate direction, which is something we can read straight off a deformation figure.
The small-deformation assumption is what makes this legitimate. Because the displacements are infinitesimal compared with the rod lengths, each rod may be treated as merely translated, staying parallel to its original direction, and its deformation is the projection of the nodal displacement onto its own axis.
Figure 8.12.7: Unit displacement in \(x\)
Figure 8.12.8: Unit displacement in \(y\)
Moving node 1 one unit in \(x\), as in Figure 8.12.7, stretches rod 1 by its full length, stretches rod 2 by the projection \(\cos 45^\circ = 1/\sqrt2\), and does nothing to the vertical rod 3,
Moving it one unit in \(y\), as in Figure 8.12.8, leaves the horizontal rod 1 unchanged, shortens rod 2 by \(\sin 45^\circ\) and shortens rod 3 by its full length,
and note that not one material property or cross-sectional area appears in it. The matrix \(\bm A\) is purely geometric.
Building the same matrix by joint equilibrium
The alternative route reads 8.12.4 instead, and it is the classical method of joints. Isolate node 1 and write force equilibrium in the two coordinate directions, with the rod forces drawn positive in tension so that each pulls the joint towards the far end of its rod.
and is the transpose of 8.12.6, as the energy argument promised. Use whichever construction you find less error prone and transpose it.
Assembling and solving
The material matrix is diagonal, with entries \(E_iA_i/L_i\) from 8.12.1. With \(E_i = E\), \(A_i = A\), \(L_1 = L_3 = L\) and \(L_2 = \sqrt2 L\), the diagonal reads \(EA/L\) times \(1\), \(1/\sqrt2\) and \(1\).
E, A, L, P = sp.symbols('E A L P', positive=True)r2 = sp.sqrt(2)A_mat = sp.Matrix([[1, 0], [1/r2, -1/r2], [0, -1]])S_e = (E*A/L) * sp.diag(1, 1/r2, 1)S = sp.simplify(A_mat.T * S_e * A_mat)ltx(r"\bm A =", A_mat, r",\quad \bm S^e =", S_e, r",\quad \bm S = \bm A^\mathsf{T} \bm S^e \bm A =", S)
\[ \bm A =\left[\begin{matrix}1 & 0\\\dfrac{\sqrt{2}}{2} & - \dfrac{\sqrt{2}}{2}\\0 & -1\end{matrix}\right],\quad \bm S^e =\left[\begin{matrix}\dfrac{A E}{L} & 0 & 0\\0 & \dfrac{\sqrt{2} A E}{2 L} & 0\\0 & 0 & \dfrac{A E}{L}\end{matrix}\right],\quad \bm S = \bm A^\mathsf{T} \bm S^e \bm A =\left[\begin{matrix}\dfrac{A E \left(\sqrt{2} + 4\right)}{4 L} & - \dfrac{\sqrt{2} A E}{4 L}\\- \dfrac{\sqrt{2} A E}{4 L} & \dfrac{A E \left(\sqrt{2} + 4\right)}{4 L}\end{matrix}\right] \]
The structural stiffness matrix is symmetric, as 8.12.5 requires, and its diagonal entries are equal here because the structure happens to be symmetric about the diagonal rod. The off-diagonal entries are negative, which says that pushing the node in \(x\) makes it want to move in \(-y\), a coupling supplied entirely by the diagonal rod.
Applying a load of magnitude \(P\) along the positive \(y\) direction of the free node, \(\bm f = [0, P]^\mathsf{T}\), and inverting gives its displacement.
\[ \begin{aligned}\bm u &=\left[\begin{matrix}\dfrac{\sqrt{2} L P}{2 A E \left(\sqrt{2} + 2\right)}\\\dfrac{L P \left(\sqrt{2} + 4\right)}{2 A E \left(\sqrt{2} + 2\right)}\end{matrix}\right]= \frac{PL}{EA}\left[\begin{matrix}0.2071\\0.7929\end{matrix}\right]\\ \bm N &=\left[\begin{matrix}0.2071\\-0.2929\\-0.7929\end{matrix}\right]\,P\end{aligned} \]
The node moves \(0.79\,PL/EA\) along the load and \(0.21\,PL/EA\) across it, so it does not travel in the direction it is pushed. Of the three rods, only rod 1 ends up in tension; rods 2 and 3 are in compression, with rod 3 carrying by far the most at \(0.79P\). That distribution is worth pausing on, because it is not what a first glance suggests. The load is vertical and rod 3 is the vertical rod, so it takes the largest share, but the diagonal rod still picks up more than a third of it and the horizontal rod is loaded despite being perpendicular to the applied force. Every member participates, because they all share one joint whose displacement they all feel.
When \(\bm A^\mathsf{T}\) is square, the structure is statically determinate and the rod forces follow from the loads alone, \(\bm N = (\bm A^\mathsf{T})^{-1}\bm f\), with no material properties needed. Our \(\bm A^\mathsf{T}\) is \(2 \times 3\), so this truss is statically indeterminate: three unknown rod forces and only two equilibrium equations. The missing information is the deformation relation, exactly as it was for the heated rod of Chapter 8.9.
A larger structure
Figure 8.12.10 shows what happens as soon as the structure grows: five rods, four nodes, a pin at node 1 and a roller at node 2, and loads at nodes 3 and 4. Three nodes are now partly or wholly free, so \(\bm u\) has five entries and \(\bm A\) is \(5 \times 5\).
Figure 8.12.10: A five-rod truss with a pin, a roller and two applied loads.
The method does not change. Each partly free node contributes its equilibrium equations to \(\bm A^\mathsf{T}\), one row per free degree of freedom,
and the remaining rows come from node 4. What does change is the amount of bookkeeping, and it changes fast. Doubling the number of nodes doubles the rows of \(\bm A\) and quadruples the entries of \(\bm S\), and reading each entry off a deformation sketch stops being practical long before a structure becomes interesting.
Why this is not the end
Everything in this chapter is correct and none of it scales. The matrix \(\bm A\) was built by inspecting figures, which works for three rods and fails for three hundred. Worse, the construction is tied to this particular set of boundary conditions: fixing a different node changes which degrees of freedom appear in \(\bm u\) and forces the whole matrix to be rebuilt from scratch.
The repair is to stop treating the structure as a whole and start treating each rod as an independent object with its own local coordinate system, expressing its stiffness in that system once and for all and then rotating it into the global frame. Assembling those rotated element matrices into a global system, and only then applying boundary conditions, gives a procedure that a computer can carry out for any truss whatsoever. That is the direct stiffness method, and it is the subject of Chapter 8.13. It is also the finite element method in miniature: what changes when we move from trusses to beams, plates and solids is which element matrix goes into the assembly, not the assembly itself.