The Calculation, Step by Step

The structure matrix is assembled and the load vector with it. What remains is to apply the supports, solve, and turn the displacements back into the numbers an engineer reads — and then to check that the answer is an answer.

Split the freedoms into the ones that can move and the ones the supports hold. Solve the free ones against the load; the held ones give up the reactions.

Partitioning at the supports

Order the freedoms into two groups: f for free and r for restrained. The stiffness equation splits into blocks:

KffKfr
KrfKrr
Kff uf + Kfr ur = Ff   and   Krf uf + Krr ur = Fr
the partitioned system

The first line is solvable: ur is known (zero at an ordinary support), and Ff is the applied load at the free freedoms. So

uf = Kff−1 ( Ff Kfr ur )
the only system that gets solved

The second line is not solved at all — it is read. Once uf is known, it hands over the reactions.

Whether Kff can be inverted is the whole question of stability. If it is singular, some combination of free displacements costs no force: the structure is a mechanism, and the program should say which joint is loose rather than return enormous numbers.

Support settlement, and springs

A support that moves by a known amount is not a special case: put the movement into ur and the term Kfr ur carries it into the load. A support that resists rather than holds — an elastic foundation — is not restrained at all; its spring stiffness is simply added to the diagonal of that freedom, and it stays in the free set.

Actually solving it

Nobody inverts Kff. Inversion is slower, less accurate, and throws away the sparsity. What is done instead is a factorisation — Cholesky for a symmetric positive definite matrix, which is what a properly restrained structure gives — and then a forward and backward substitution per load case.

Factorise onceThe expensive step, and it depends only on the structure. Roughly n·b² work for n freedoms and bandwidth b.
Substitute per caseCheap. This is why a second load case, or a twentieth combination, costs almost nothing.
Watch the conditioningAxial stiffness EA/L is often thousands of times the bending stiffness 12EI/L³. A wide spread of magnitudes loses precision, and is why a "rigid" member modelled with an enormous E is bad practice rather than a shortcut.

Recovering the answers

1. Reactions

R = Krf uf + Krr urFr

The last term matters whenever a load is applied at a supported joint, or a member with a distributed load frames into one: part of that load goes straight into the support through the fixed end forces and never reaches the free freedoms.

2. Member end forces

Take each member's end displacements from u, rotate them back into the member's own axes, and use the member's own matrix:

= T umember + 0

This is the important line of the whole analysis, because these six numbers — axial, shear and moment at each end — are what a member is designed from. The 0 term is the fixed end forces put back, as the guide on loads between joints described.

3. The diagrams

Along a member, start from the end force and integrate its own load:

AxialConstant between joints unless a load acts along the member.
ShearStarts at the end shear and changes by the area of the load: constant under no load, linear under a uniform load, stepping at a point load.
MomentThe integral of the shear: linear under no load, parabolic under a uniform load, peaking where the shear crosses zero.
DeflectionFrom the end displacements and rotations, with the member’s own bending under its span load added.

This is why a program shows a parabolic moment between two joints with nothing between them: the member's load never left it, and the diagram is drawn from the member, not from the joints.

Checking the answer

Four checks catch nearly everything, and a program should be doing all of them:

  • Global equilibrium. The reactions plus every applied load must sum to zero in X, in Y, and in moment about any point. This is the strongest check there is: it is independent of the stiffnesses entirely.
  • Joint equilibrium. At each joint, the end forces of every member meeting there, plus the joint load, must balance. A moment that does not close means a release was applied where it was not meant to be.
  • The deflected shape. Look at it before reading any number. Supports that move, members that pull apart at a joint, a beam sagging the wrong way — all obvious in the picture and invisible in a table.
  • A number you already know. Model one simply supported beam under uniform load and confirm wL²/8 and 5wL⁴/384EI. If a unit is wrong anywhere in the model, this finds it in a minute.

Load cases and combinations

Everything above is linear, so a load combination is the factored sum of load cases and nothing has to be re-solved from scratch. Two ways to get there give the same answer: factor the load vectors and solve once per combination, or solve each case once and add the results with factors. Programs use the first, because the factorisation is already done and one more substitution is cheaper than storing everything.

What is not allowed to be combined this way is anything non-linear — second-order effects, gapping supports, cracked sections — which is worth remembering when an analysis is used beyond what it assumes.

The whole method on one page

  1. Number the joints and their freedoms.
  2. For each member: L, c, s, then , then k = TT.
  3. For each loaded member: fixed end forces 0, reversed and rotated into the load vector.
  4. Assemble K and F through the connectivity.
  5. Partition at the supports; factorise Kff; solve for uf.
  6. Recover reactions, then member end forces, then the diagrams.
  7. Check equilibrium — global, then joint by joint.

That is what runs every time the Calculate button is pressed in the analysis tool on this site. Draw a frame, put a load on it, and read the answers knowing where each of them came from.